Ctrl+acScreen을 실행할 때 새 창을 만들고 각 창에서 vim을 실행하는 데 사용할 수 있습니다 . 또한 vim이 이미 실행 중인 동안 화면에서 screen vim
명령을 여러 번 실행하여 새 창을 열 수 있습니다. 예상대로 작동합니다. 하지만...
다음과 같이 스크립트에 명령을 여러 번 넣으면:
#!/bin/bash
screen vim
screen vim
screen vim
...화면 내에서 스크립트를 실행하면 첫 번째 명령은 예상대로 실행되지만 두 번째 및 후속 명령은 실행되지 않습니다.
내가 주목한 점은 다음과 같습니다.
- Window 2 이상은
stty -ixon
적용되지 않아 .bashrc 에 설정했습니다. - .vimrc에서 이를 명시적으로 설정 하지 않으면
colorscheme
창 1에서 하나의 구성표를 사용하고 모든 후속 창에서 다른 구성표를 사용하게 됩니다. - 명령을 건너뛰는 경우가 있습니다. 즉, 스크립트가 3개를 열도록 설정되어 있으면 새 창이 2개만 열리는 경우가 있습니다.
- 을 수행하면
: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