我一直在尝试编写自定义.screenrc文件TEST,如下所示
startup_message off
vbell off
caption always "%{= bb}%{+b w}%n %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
activity "Activity in %t(%n)"
shell -/bin/bash
chdir /path1
screen -t WINDOW1 bash -c 'MYSCRIPT1'
chdir /path2
screen -r WINDOW1 bash -c 'MYSCRIPT2'
我正在运行此脚本,如下所示
screen -c TEST
我想要实现的是执行一个屏幕命令,该命令在两个不同的目录路径中生成两个窗口,并且在每个窗口中应该运行两个不同的命令/脚本。
但是使用此代码我的屏幕会立即终止,这是默认行为。
我希望屏幕窗口不应该被终止,而是一旦命令在每个屏幕窗口中终止,它们应该分别回到目录path1目录path2。
答案 0 :(得分:0)
我解决了这个问题如下。写了一个名为STARTSCRIPT的启动脚本,内容如下
screen -d -m -S SESSIONNAME
screen -X -S SESSIONNAME -p 0 -t WINDOW0
screen -X -S SESSIONNAME screen -t WINDOW1 1
echo "Trying to start memcached...."
screen -X -S SESSIONNAME -p 1 stuff "memcached
"
echo 'Memcached started....'
echo "Trying to start MYSCRIPT1...."
screen -X -S SESSIONNAME screen -t MYSCRIPT1 2
screen -X -S SESSIONNAME -p 2 stuff "cd /path1; ./MYSCRIPT1
"
echo 'MYSCRIPT1 started....'
echo "Trying to start MYSCRIPT2...."
screen -X -S SESSIONNAME screen -t MYSCRIPT2 3
screen -X -S SESSIONNAME -p 3 stuff "cd /path2; ./MYSCRIPT2
"
echo 'MYSCRIPT2 started....'
重要的是要在命令的下一行注意双引号(“),否则命令将不会执行。
此外,我将屏幕硬状态设置移动到其自己的〜/ .screenrc文件中,以便创建的每个屏幕窗口看起来都像是屏幕会话中的选项卡。
startup_message off
vbell off
caption always "%{= bb}%{+b w}%n %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
activity "Activity in %t(%n)"
shell -/bin/bash
我按如下方式执行了STARTSCRIPT
$./STARTSCRIPT
它在自己的屏幕窗口中给出了所需的运行命令输出,即使命令完成,这些窗口也不会终止。