쉘 스크립트: 화면 실행, 여러 화면 열기 및 각 화면에서 명령 실행

쉘 스크립트: 화면 실행, 여러 화면 열기 및 각 화면에서 명령 실행

제목이 말하는 내용은 다음과 같습니다.

내 쉘 스크립트는

  • 명령 A를 실행하고 완료될 때까지 기다립니다.
  • "스크린" 실행
  • 초기 화면에서 B1 명령 실행
  • 새 창 열기(보통 Cmd-ac를 통해)
  • 새 창에서 B2 명령을 실행하십시오.
  • 새 창 열기
  • 새 창에서 B3 명령을 실행하십시오.

그게 전부입니다. 일부(또는 전부)가 완료될 때까지 기다릴 필요는 없습니다. 하지만 그렇게 하면 보너스 포인트가 제공됩니다. 어떻게 해야 합니까?

답변1

screen"mysession" 세션의 배경 이름을 시작합니다 .

screen -d -m -S mysession

top첫 번째 창에서 실행

screen -S mysession -X exec top

다른 창을 시작하고 이름을 "win1"로 지정한 후 " vmstat 10"를 실행하세요.

screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10

다른 창을 시작하고 이름을 "win2"로 지정한 후 " iostat 30"를 실행하세요.

screen -S mysession -X screen -t win2 
screen -S mysession -p win2 -X exec iostat 30

세션을 연결하고 보려면:

screen -x -S mysession

screen프로그램 중 하나라도 종료되면 각 프로그램에서 셸(필요한 경우 사용할 수 있음)이 시작되므로 창이 닫히지 않습니다 .

- 또는 -창당 단일 명령만 원하거나 프로세스가 완료된 후 더 쉽게 정리하려면 각 창에서 기본 셸을 실행하지 말고 다음 명령만 실행하세요.

screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0    # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30

screenzombie프로세스가 종료될 때 창을 "종료"하거나(창 내용을 그대로 유지, 아래 참조) 종료합니다 .

screen -S mysession -X quit   # nuke whole the session

또는

screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill

(이것은 실행 중인 프로세스를 종료할 수도 있고 종료하지 않을 수도 screen있으며, 각 프로세스에 SIGHUP을 보냅니다.)

창을 자동으로 닫고 모든 프로세스가 완료되면 종료 하려면 세션을 만든 후에 다음을 추가하십시오(단, 에 설정 screen하지 않은 경우 어쨌든 기본값일 수 있음).zombie.screenrc

screen -S mysession -X zombie

그러면 "좀비" 닫기 및 부활 키가 설정 해제되고, 각 창의 명령이 종료되면 창이 사라지고, screen마지막 창이 종료되면 자체적으로 닫힙니다. ( defzombie대신 사용해야 할 수도 있지만 zombie반대 문서에도 불구하고 후자만 작동합니다.)

관련 정보