如何在screen会话中执行命令

4

我想知道如何在一个Screen会话中执行命令。我搜索了一下,找到了这个:

screen -S nameofscreen -X stuff "command"

当我输入这个命令时,它会在屏幕上显示但不会执行。所以我的问题是如何使用这个命令来按下回车键。
4个回答

5
我会像这样做:

我会这样做:

screen -S sessionName bash -c 'cmd; exec bash'

这段代码会开启一个新的会话,执行cmd并启动shell(否则它将放弃这个新会话)。

-X选项允许你向指定会话发送输入命令,这就是为什么你的命令没有执行的原因。如果要执行它,需要像Paul建议的那样加入回车符。可以通过按下Ctrl+v,然后再按下Enter来实现。这将产生^M符号。所以:

screen -S sessionName -X stuff 'cmd^M'

然而,仅仅这样做并不能附加一个分离的会话。


4
在bash中,您可以在$'...'结构中使用\n
screen -S nameofscreen -X stuff $'command\n'

2
在bash shell中,你可以使用ctrl-V将非打印字符显式地放入字符串中。因此,在你的命令结束前,尝试在双引号之前输入ctrl-V ctrl-L ctrl-V ctrl-M。

对我来说,使用 CTRL+V + ENTER 可以生成 ^M,因此可以按照这里的描述执行 screen -S test -X stuff 'top^M' - Suuuehgi

1

我花了一些时间,但是我发现: 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后,它能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接