运行 Screen 时,我可以用来Ctrl+ac创建一个新窗口并在每个窗口中运行 vim。同样从屏幕上,我可以screen vim
多次运行该命令以在 vim 已运行的情况下打开新窗口。这些按预期工作。然而...
如果我在脚本中多次放置该命令,例如:
#!/bin/bash
screen vim
screen vim
screen vim
...并从屏幕内运行该脚本,第一个命令将按预期运行,但第二个和后续命令不会。
我注意到的事情是:
- Window 2 及更高版本未
stty -ixon
应用,我已在 .bashrc 中设置 - 如果我没有
colorscheme
在 .vimrc 中明确设置,它将在窗口 1 中使用一种方案,并在所有后续窗口中使用另一种方案 - 有时会跳过命令,即有时只会打开两个新窗口,而脚本设置为打开三个
- 如果我执行 a
:windowlist
,窗口 2 及以下窗口将不会设置登录标志(screen vim
直接运行将设置此标志),例如,
名称标志数量 0 重击 $ 1 vim $ <-- 从窗口 0 打开 1..3 运行脚本(2 或 3 上没有标志) 2 维姆 3 维姆 4 vim $ <-- 从窗口 0 手动运行 `screen vim` 总是设置标志
- Ctrl+aL在未登录的窗口上使用将返回消息
This window is not logged in
并且不会设置标志。再次按下按键将在登录和注销之间切换(尽管stty -ixon
“etc”仍然不适用) - 运行
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