如何编写 shell 脚本在不同的屏幕会话中运行多个命令?

如何编写 shell 脚本在不同的屏幕会话中运行多个命令?

我的目标是编写一个zsh脚本来创建多个screen会话并在每个会话上运行单独的命令。我还想在脚本的开头检查是否有任何屏幕正在运行作业并终止所有空闲的屏幕。此外,如果可能的话,我希望有一种方法来记录单个屏幕的标准输出并获取它们的 ID 号。到目前为止,我已经尝试过以下方法:

### Script for running everything in screens ###
killall -15 screen ## We make sure that no screens are running for now
#bkg_array = ("TopJets" "BosonJets" "DiBoson" "TTbar")

screen -dmS "MYSCREEN"
screen -S "MYSCREEN" -p 0 -X stuff 'echo "The array has of elements."\n'

但是,我似乎无法发送按下的按键Enter;我怎样才能达到这样的效果?此外,如果没有该-p选项,命令不会发送到屏幕。按下后,Ctrl+V+Enter字符^M被粘贴到屏幕上,并在屏幕会话中按下回车键,但我不知道为什么会这样。

感谢您的帮助,有任何歧义之处欢迎指出。

答案1

我发现虽然 screen 不解释诸如 之类的命名字符\n,但它确实会处理八进制转义。因此stuff 'echo "The array has of elements."\n',您可以使用:

stuff 'echo "The array has of elements."'\012

答案2

所以我做的是这样的:

屏幕 -dmS SCREEN_SESSION_NAME -t TAB_NAME ~/bin/my_first_prog.sh ;屏幕 -S SCREEN_SESSION_NAME -X 屏幕 -t TAB_NAME2 ~/bin/my_second_prog.sh

您将看到一个名为 SCREEN_SESSION_NAME 的屏幕会话,其中包含两个选项卡。为了退出一切,我优雅地终止程序(kill -1)并运行

屏幕 -S SCREEN_SESSION_NAME -X 退出

相关内容