Bash 脚本中屏幕窗口打开和命名的非确定性行为

Bash 脚本中屏幕窗口打开和命名的非确定性行为

我有以下 bash 脚本,用于在 13.10 中从命令行设置具有四个窗口的屏幕会话。注释表明了我认为它应该做什么。

screen -dmS mysession # start screen, name the session 'mysession'
screen -S mysession -p 0 -X exec echo -ne "\ekserver\e\\" # name the first window 'server'
screen -S mysession -p 0 -X exec screen # start a second window
screen -S mysession -p 1 -X exec echo -ne "\ekvim 1\e\\" # name second window 'vim 1'
screen -S mysession -p 1 -X exec screen # start a third window
screen -S mysession -p 2 -X exec echo -ne "\ekvim 2\e\\" # rename third window 'vim 2'
screen -S mysession -p 2 -X exec screen # start a fourth window
screen -S mysession -p 3 -X exec echo -ne "\ekconsole\e\\" # name fourth window 'console'

每次我运行它,我都会得到我想要的结果:四个窗口,每个窗口都按我在这里命名。其余时间我得到一到四个窗口,其中一些窗口的名称正确,其他时间则使用默认的“bash”名称。为什么我会看到这种情况,我该如何修复它?

每次运行它时,我都会确保屏幕会话已结束,通过在每个窗口中键入 exit 并检查屏幕 -ls 以查看没有活动的屏幕会话。

结果: 来自“chris”的评论这一页我现在有一个项目特定的点文件,我.screenrc使用它来调用它source .projectscreenrc- 当文件存在时,它包含screen -tglenn jackman 的答案中建议的命令。当它不存在时,屏幕会正常运行。我仍然不确定为什么这样做有效,以及为什么我原来的方法没有,但这要干净得多。

答案1

没有回答你的问题,但这就是我使用屏幕的方式:

将其放入您的~/.screenrc

screen -t server
screen -t vim_1
screen -t vim_2
screen -t console

每次您想要进入屏幕时,使用screen -DR-- 如果屏幕会话不存在,则创建它;如果屏幕会话正在运行,则重新连接到它。

相关内容