为什么 screen 似乎对通过 -X 传递的命令没有任何作用?

Suk*_*asa 7 ubuntu gnu-screen

我一直在尝试为 minecraft 服务器设置一个自动备份系统,但我在使用屏幕时遇到了问题,特别是在使用“screen -r sessionname -X "/var/minecraft/somebatchfile"”时,没有任何反应。

目前我的流程有点像这样:

screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh

这将毫无问题地启动 minecraft 服务器。然而,问题是即使像这样简单的跟进也会失败:

screen -r minecraft -X "stop"

我没有收到错误消息或成功消息,并且服务器实际上并没有像它应该的那样断开客户端并关闭。我想我做错了什么,但我不知道是什么。我犯了一些明显的错误吗?我已经阅读了一些手册页,但我自己没有运气弄清楚。

wag*_*wag 6

你必须给参数-X一个screen命令,我认为你想在screen会话中“填充”一个 minecraft-server 命令。

screen -r minecraft -p 0 -X stuff "stop $(printf '\r')"
Run Code Online (Sandbox Code Playgroud)

printf发送一个回车,因此命令“停止”被执行。-p 0确保将字符发送到初始屏幕窗口。

要发送它,ssh您必须将命令包含在其中" "(您也可以使用` `,但这不会让您执行命令替换)。

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action\! $(echo -ne '\r')""
Run Code Online (Sandbox Code Playgroud)

当心这!是一个保留字,你必须逃避它。

可以在命令中包含用户生成的换行符以执行它:

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"
Run Code Online (Sandbox Code Playgroud)

!这里不需要逃避。