쉘 스크립트에서 여러 화면 창을 실행하면 잘못된 구성이 사용됩니다.

쉘 스크립트에서 여러 화면 창을 실행하면 잘못된 구성이 사용됩니다.

Ctrl+acScreen을 실행할 때 새 창을 만들고 각 창에서 vim을 실행하는 데 사용할 수 있습니다 . 또한 vim이 이미 실행 중인 동안 화면에서 screen vim명령을 여러 번 실행하여 새 창을 열 수 있습니다. 예상대로 작동합니다. 하지만...

다음과 같이 스크립트에 명령을 여러 번 넣으면:

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

...화면 내에서 스크립트를 실행하면 첫 번째 명령은 예상대로 실행되지만 두 번째 및 후속 명령은 실행되지 않습니다.

내가 주목한 점은 다음과 같습니다.

  1. Window 2 이상은 stty -ixon적용되지 않아 .bashrc 에 설정했습니다.
  2. .vimrc에서 이를 명시적으로 설정 하지 않으면 colorscheme창 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

나는 이 문제가 백그라운드에서 모든 명령(첫 번째 명령 제외)을 실행하는 스크립트로 인해 발생한다고 생각합니다. 로 분기하여 첫 번째 명령에서 동일한 문제를 강제할 수 있습니다 &.

스크립트가 각 명령을 포그라운드에서 하나씩 실행하도록 하는 방법을 찾지 못한 후 대체 솔루션을 찾았습니다.

다음과 같이 모든 명령을 사용자 정의 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

관련 정보