シェルスクリプトで複数の画面ウィンドウを実行すると、誤った設定が使用されます。

シェルスクリプトで複数の画面ウィンドウを実行すると、誤った設定が使用されます。

Ctrl+acScreenを実行するときに新しいウィンドウを作成し、各ウィンドウでvimを実行するために使用できます。また、vimがすでに実行されている間は、画面上でscreen vimコマンドを複数回実行して新しいウィンドウを開くこともできます。期待どおりに動作します。しかし...

次のようにスクリプトにコマンドを複数回置くと:

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

...画面内でスクリプトを実行すると、最初のコマンドは期待どおりに実行されますが、2番目以降のコマンドは実行されません。

私が注目した点は次のとおりです。

  1. Window 2以降はstty -ixon適用されず、.bashrcに設定されました。
  2. .vimrcでこれを明示的に設定しない場合は、colorschemeウィンドウ1で1つのスキームを使用し、後続のすべてのウィンドウで別のスキームを使用します。
  3. コマンドをスキップすることがあります。つまり、スクリプトが3つを開くように設定されていると、新しいウィンドウが2つだけ開くことがあります。
  4. を実行すると、: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. 実行すると、htopvimのすべてのインスタンス(ログインしていないインスタンスを含む)が自分のユーザーとして実行されていることが表示されます。

複数のウィンドウを手動で開くと設定が正しく適用されますが、スクリプトを使用すると適用されないのはなぜですか?

私はLinuxに初めて触れていて、ここで愚かなことをしているのかわかりません。

答え1

この問題は、バックグラウンドですべてのコマンド(最初のコマンドを除く)を実行するスクリプトが原因であると思います。に分岐して、最初のコマンドで同じ問題を強制できます&

スクリプトに各コマンドをフォアグラウンドで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

関連情報