Bash

從 shell 腳本啟動多個螢幕視窗使用錯誤的配置

  • January 26, 2018

在執行 Screen 時,我可以Ctrl+a``c用來創建一個新視窗並在每個視窗中執行 vim。同樣在 Screen 中,我可以screen vim多次執行該命令以打開已執行 vim 的新視窗。這些按預期工作。然而…

如果我將命令多次放入腳本中,例如:

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

…並從 Screen 中執行該腳本,第一個命令將按預期執行,但第二個和後續命令不會。

我注意到的事情是:

  1. Window 2 及更高版本未stty -ixon應用,我已在 .bashrc 中設置
  2. 如果我沒有colorscheme在 .vimrc 中明確設置,它將在視窗 1 中使用一種方案,在所有後續視窗中使用另一種方​​案
  3. 有時會跳過一個命令,即有時只會打開兩個新視窗,其中腳本設置為打開三個
  4. 如果我執行 a :windowlist,則視窗 2 和以下視窗將不會設置登錄標誌(screen vim直接執行將設置此標誌),例如,
編號名稱標誌
0 美元
1 vim $ <--從打開的 1..3 視窗 0 執行腳本(2 或 3 上沒有標誌)
2個
3個
4 vim $ <-- 從視窗 0 手動執行 `screen vim` 總是設置標誌
  1. Ctrl+a``L在未登錄的視窗上使用將返回消息This window is not logged in並且不會設置標誌。再次按下按鍵將在登錄和註銷之間切換(儘管stty -ixonetc’ 仍然不會應用)
  2. 執行htop將顯示所有 vim 實例(包括未登錄的實例)正在我的使用者下執行。

為什麼手動打開多個視窗可以正確應用我的設置,但使用腳本卻不能?

我是 Linux 新手,不確定我是否在這裡做一些愚蠢的事情。

我相信我發現問題是由腳本在後台執行所有命令(第一個命令除外)引起的。我可以強制第一個命令出現同樣的問題,方法是用&.

在無法找到讓腳本一個接一個地在前台執行每個命令的方法之後,我找到了另一種解決方案……

我可以將所有命令放在自定義 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

引用自:https://unix.stackexchange.com/questions/416979