我想知道如何在一个Screen会话中执行命令。我搜索了一下,找到了这个:
screen -S nameofscreen -X stuff "command"
当我输入这个命令时,它会在屏幕上显示但不会执行。所以我的问题是如何使用这个命令来按下回车键。
我想知道如何在一个Screen会话中执行命令。我搜索了一下,找到了这个:
screen -S nameofscreen -X stuff "command"
我会这样做:
screen -S sessionName bash -c 'cmd; exec bash'
这段代码会开启一个新的会话,执行cmd
并启动shell(否则它将放弃这个新会话)。
-X
选项允许你向指定会话发送输入命令,这就是为什么你的命令没有执行的原因。如果要执行它,需要像Paul建议的那样加入回车符。可以通过按下Ctrl+v,然后再按下Enter来实现。这将产生^M
符号。所以:
screen -S sessionName -X stuff 'cmd^M'
然而,仅仅这样做并不能附加一个分离的会话。
$'...'
结构中使用\n
:screen -S nameofscreen -X stuff $'command\n'
我花了一些时间,但是我发现: screen 4.06版本有一个bug。 如果你想像这样在共享的screen会话中发送命令,它会失败:
screen -S shared_session_name -X stuff "command \n"
Cannot opendir /run/screen/S-$USER: Permissions denied
更新到版本screen 4.09后,它能正常工作。
CTRL+V
+ENTER
可以生成^M
,因此可以按照这里的描述执行screen -S test -X stuff 'top^M'
。 - Suuuehgi