我无法弄清楚如何启动屏幕会话,以及如何在附加的屏幕会话中运行命令而无需人工干预。预期的行为是:
[me@me ~]# screen -S name -L --mystery_flag 'hostname;echo yes;echo no'
#new screen session
[me@me ~]# hostname
me
[me@me ~]# echo yes
yes
[me@me ~]# echo no
no
[me@me ~]#
我只找到了将命令发送到屏幕的分离会话的方法,或者在发送诸如 之类的命令后关闭屏幕会话的方法screen -S name "command"
。我希望会话保持打开状态,因为它将用于运行交互式脚本。
答案1
GNUscreen
采用许多选项,然后是在屏幕会话中启动的可选命令。如果未给出命令,screen
会话将包含交互式 shell 会话。当会话运行的命令终止时,会话screen
就会终止,无论它是在 的命令行上给出的命令screen
,还是它运行的 shell。
你有两个问题:
- 您想要运行多个命令。
- 您希望会话最终不会终止,而是让您处于交互式 shell 会话中,在
screen
.
screen
要解决第一个问题,请将启动命令设为
sh -c 'hostname; echo yes; echo no'
这是启动内联sh -c
脚本的单个命令。该脚本运行您的命令。如果您正在运行的脚本需要(您的示例不需要),您可能希望使用bash -c
代替。sh -c
bash
要解决第二个问题,请考虑启动交互式 shell 作为脚本运行的命令列表中的最后一步sh -c
:
sh -c 'hostname; echo yes; echo no; exec bash -i'
启动exec bash -i
一个交互式bash
shell 会话(这exec
使得它代替贝壳sh -c
)。
在会话中运行此命令screen
:
screen sh -c 'hostname; echo yes; echo no; exec bash -i'
一旦 shell 会话终止, GNUscreen
将终止bash -i
。