如何在不打开Screen会话的情况下向Minecraft服务器执行命令
如何在不打开Screen会话的情况下向Minecraft服务器执行命令
嘿,我来帮你搞定这个问题!你想要通过Bash脚本给运行在Screen会话里的Minecraft服务器批量添加白名单用户,而且不想手动打开Screen会话操作对吧?咱们一步步来解决:
首先,你之前尝试的两个命令格式不对,这才导致没效果。正确的做法是用Screen的-X stuff命令,它可以直接把输入内容发送到指定的运行中会话里,不需要打开会话界面。
正确的命令格式
要给名为Minecraft的Screen会话发送白名单添加命令,你需要这样写:
screen -S Minecraft -X stuff "/whitelist add merfy69\n"
这里的关键点:
-S Minecraft:指定目标Screen会话的名称(如果不确定会话名,可以用screen -list查看准确的会话标识)-X stuff:告诉Screen要向会话中输入内容"\n":模拟按下回车键,这样Minecraft服务器才会执行这条命令
为什么你之前的命令没用?
screen -d -m Minecraft -c "/whitelist add merfy69":这个命令是用来创建一个新的后台Screen会话并执行命令,而不是给已经在运行的Minecraft会话发命令,所以完全不符合你的需求。screen -S Minecraft -X "/whitelist add merfy69":-X后面需要跟Screen的内部命令(比如stuff),而不是直接放Minecraft的命令,所以这条命令也无法被正确解析。
关于模拟Ctrl+A+D的问题
如果真的不小心进入了Screen会话,其实不需要手动按快捷键,直接在终端执行screen -d Minecraft就能将指定的会话后台化(相当于模拟了Ctrl+A+D的操作)。不过其实你根本不需要走到这一步,用上面的stuff命令就能直接完成白名单添加操作,完全不用进入会话。
批量添加的Bash脚本示例
如果你要批量处理多个用户名,可以写一个简单的脚本,比如读取一个每行一个用户名的文本文件:
#!/bin/bash # 定义存储用户名的文件路径 USER_LIST="whitelist_users.txt" # 循环读取每个用户名并添加到白名单 while read -r username; do # 跳过空行 if [[ -z "$username" ]]; then continue fi screen -S Minecraft -X stuff "/whitelist add $username\n" echo "已将用户 $username 添加到白名单" # 给服务器一点处理时间,避免命令发送过快 sleep 1 done < "$USER_LIST"
备注:内容来源于stack exchange,提问作者merfy
相关产品推荐
相关产品推荐

