运行屏幕并立即运行其他命令

运行屏幕并立即运行其他命令

我无法弄清楚如何启动屏幕会话,以及如何在附加的屏幕会话中运行命令而无需人工干预。预期的行为是:

[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。

你有两个问题:

  1. 您想要运行多个命令。
  2. 您希望会话最终不会终止,而是让您处于交互式 shell 会话中,在screen.

screen要解决第一个问题,请将启动命令设为

sh -c 'hostname; echo yes; echo no'

这是启动内联sh -c脚本的单个命令。该脚本运行您的命令。如果您正在运行的脚本需要(您的示例不需要),您可能希望使用bash -c代替。sh -cbash

要解决第二个问题,请考虑启动交互式 shell 作为脚本运行的命令列表中的最后一步sh -c

sh -c 'hostname; echo yes; echo no; exec bash -i'

启动exec bash -i一个交互式bashshell 会话(这exec使得它代替贝壳sh -c)。

在会话中运行此命令screen

screen sh -c 'hostname; echo yes; echo no; exec bash -i'

一旦 shell 会话终止, GNUscreen将终止bash -i

相关内容