从 shell 脚本启动多个屏幕窗口使用了错误的配置

从 shell 脚本启动多个屏幕窗口使用了错误的配置

运行 Screen 时,我可以用来Ctrl+ac创建一个新窗口并在每个窗口中运行 vim。同样从屏幕上,我可以screen vim多次运行该命令以在 vim 已运行的情况下打开新窗口。这些按预期工作。然而...

如果我在脚本中多次放置该命令,例如:

#!/bin/bash
screen vim
screen vim
screen vim

...并从屏幕内运行该脚本,第一个命令将按预期运行,但第二个和后续命令不会。

我注意到的事情是:

  1. Window 2 及更高版本未stty -ixon应用,我已在 .bashrc 中设置
  2. 如果我没有colorscheme在 .vimrc 中明确设置,它将在窗口 1 中使用一种方案,并在所有后续窗口中使用另一种方案
  3. 有时会跳过命令,即有时只会打开两个新窗口,而脚本设置为打开三个
  4. 如果我执行 a :windowlist,窗口 2 及以下窗口将不会设置登录标志(screen vim直接运行将设置此标志),例如,
名称标志数量
  0 重击 $
  1 vim $ <-- 从窗口 0 打开 1..3 运行脚本(2 或 3 上没有标志)
  2 维姆
  3 维姆
  4 vim $ <-- 从窗口 0 手动运行 `screen vim` 总是设置标志
  1. Ctrl+aL在未登录的窗口上使用将返回消息This window is not logged in并且不会设置标志。再次按下按键将在登录和注销之间切换(尽管stty -ixon“etc”仍然不适用)
  2. 运行htop将显示 vim 的所有实例(包括未登录的实例)正在我的用户下运行。

为什么手动打开多个窗口可以正确应用我的设置,但使用脚本却不能?

我是 Linux 新手,不确定我在这里是否做了一些愚蠢的事情。

答案1

我相信我发现问题是由脚本在后台运行所有命令(第一个命令除外)引起的。我可以通过将第一个命令与 分叉来强制第一个命令出现相同的问题&

在无法找到一种方法让脚本在前台逐个运行每个命令之后,我找到了一种替代解决方案......

我可以将所有命令放入自定义 screenrc 文件(例如 my_screenrc)中,如下所示:

# Import default screenrc
source ${HOME}/.screenrc

# Run screen-specific commands (not bash ones)
screen     # Run bash in window 0
screen vim # Run vim in windows 1 through 3 (with correct settings)
screen vim
screen vim

然后我可以从 bash 运行它:

screen -c my_screenrc

相关内容