我一直试图向 opensolaris 中正在运行的 gnu screen 会话 (4.00.03) 发送命令,但无法让它通过以下任何组合运行任何命令:screen -X
好的,我用 启动一个屏幕会话screen -S test
,然后尝试用screen -r -X "date"
仅显示日期,以便我可以重新连接到它。但屏幕上既没有出现错误消息,也没有输出。我尝试了太多组合,我甚至记不清了。
关于如何实现它有什么提示吗?
我这样做的原因是我有一个程序,它不是以守护进程的形式出现,我希望在屏幕会话中启动它,这样我以后就可以看到发生了什么。
答案1
其实很简单。你可以使用以下命令:
screen -S sessionname -X stuff 'command'`echo -ne '\015'`
echo -ne '\015'
模拟按下Enter按键。
注意:'stuff' 是一个屏幕命令。 http://www.gnu.org/software/screen/manual/screen.html#Stuff
答案2
听起来你想要的是:
$ screen -S test -d -m -c /dev/null --sh -c '日期; exec $SHELL' -S 测试:命名此会话 -d -m:启动屏幕分离 -c /dev/null:忽略 ~/.screenrc(提供不同的文件或删除此选项, 如所须) --:屏幕选项结束 sh -c 'date; exec $SHELL':screen 要运行的命令,请注意,如果此命令 只是“日期”,那么屏幕将立即退出。如果你不想退出 命令退出后,您可以使用: $ screen -S test -d -m -c /dev/null -- 此处为你的命令
或者你只是想要德塔赫。
答案3
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]
打开一个新窗口(带有标题)标题)在名为会话名称并执行shell命令(带有可选参数)参数)
答案4
就像这里的一些评论一样,我一开始也无法在 Ubuntu Server 22.04 上让这个命令工作。以下是对我真正有用的方法:
screen -S <sessionName> -p 0 -X stuff 'command^M'
尽管该命令声称它在“当前窗口”上运行,但它-p 0
是如何选择第一个窗口的,并且是的更好的替代形式。stuff
^M
echo -ne '\015'
从:https://raymii.org/s/snippets/Sending_commands_or_input_to_a_screen_session.html