비슷한 것을 찾고 있습니다 command1 ; command2
. 즉, command2
이후에 실행 하는 방법이 있지만 이미 실행 중일 때 실행되도록 command1
예약하고 싶습니다 .command2
command1
command2
command1
표준 입력을 사용하지 않고 command1
출력에 입력이 실용적이지 않을 정도로 많은 텍스트를 생성하지 않는다고 가정하면(입력한 문자가 출력과 혼합됨 command1
) 간단히 입력하고 Enter를 누르면 이 문제가 해결됩니다.
답변1
일반적으로 내가 하는 일은 다음과 같습니다.Ctrl+Z fg && command2
- Ctrl+ Z일시 중지하고 쉘에 더 많은 내용을 입력할 수 있습니다.
- (선택 사항
bg
) command2를 입력하는 동안 백그라운드에서 command1을 다시 시작합니다. fg && command2
command1이 성공하면 command1이 포그라운드에서 복원되고 command2가 이후에 대기열에 추가됩니다. 물론 원하는 경우;
또는 로 바꿀 수 있습니다||
.&&
답변2
명령을 시작하다
command1
Ctrl실행을 일시 중지하려면 +를 누르세요.Z
일시 중지 명령을 실행하여 해당 작업 번호를 찾습니다. (일반적으로 일시 중지 명령을 콘솔에 표시할 때 이미 콘솔에 인쇄되어 있습니다.)
jobs
command1
백그라운드에서 계속 하자bg
계획 실행이
command2
완료되기를 기다리고 있습니다.command1
wait -n <command1 job number> ; command2
문서작업 제어 내장
답변3
몇 가지 옵션이 있습니다.
앰퍼샌드와 함께, "백그라운드로 푸시됨", 두 번째 프로그램은 첫 번째 프로그램이 시작된 후에 시작되지만 서로 병렬로 실행될 수 있습니다.
command1 & command2
앰퍼샌드 두 개 포함, "논리 AND", 두 번째 프로그램은 첫 번째 프로그램이 성공적으로 완료된 후에만 시작됩니다.
command1 && command2
세미콜론으로명령줄에서 명령을 분리하고 첫 번째 프로그램이 완료되면 실패하거나 중단되더라도 두 번째 프로그램이 시작됩니다.
command1 ; command2
당신은 그것을 사용할 수 있습니다
wait <PID>
동일한 쉘(동일한 터미널 창)에서 이미 실행된 경우 첫 번째 명령이 완료될 때까지 기다립니다.그렇지 않고 첫 번째 명령이 이미 다른 셸(다른 창)에서 실행된 경우 작은 명령을 사용할 수 있습니다.while 루프는 ps를 사용하여 PID가 여전히 발견되는지 확인합니다.
ps
. 더 이상 찾을 수 없으면 두 번째 명령이 실행됩니다.bash
이 데모 예제는 PID를 통해 실행 중인지 확인top
하고 명령을 실행하는 데 사용됩니다 .echo "*** $USER, I am ready now ***"
더 이상 실행되지 않는 경우
top
.pid=$(ps -A|grep top|cut -d ' ' -f 1); \ while [ "$pid" != "" ]; do ps -A|grep "$pid" > /dev/null; \ if [ $? -eq 0 ]; then sleep 5;else pid=""; fi; done; \ echo "*** $USER, I am ready now ***"
답변4
두 개의 터미널을 사용할 수 있는 옵션이 있는 경우 다음을 수행할 수 있습니다.
- 터미널에서 command1을 실행했다고 가정합니다(terminal1이라고 부르겠습니다).
- 새 터미널을 시작합니다(terminal2라고 부르겠습니다).
- command1의 프로세스 ID를 찾습니다(command1_pid라고 하겠습니다). 터미널2에서 명령을 실행합니다.
ps -ef | grep <command1>
실수로 하위 문자열이 있는 다른 프로세스를 찾지 않도록 grep 명령에서 필터 문자열을 올바르게 구성할 수 있습니다. - 명령 실행
wait <command1_pid> ; command2
기본적으로 wait
제공된 PID가 종료될 때까지 기다렸다가 반환되는 bash 내장 기능입니다. command1이 완료될 때까지 기다리는 작업을 bash wait
명령에 위임하기만 하면 됩니다.