bash에서 현재 실행중인 명령 후에 명령을 실행하는 방법은 무엇입니까?


18

wget으로 파일을 다운로드 중이며 다운로드가 끝난 후 컴퓨터를 끄고 싶지만 지금 어딘가에 가야합니다. :) 프로세스가 끝나면 bash에서 명령을 정확하게 실행할 수 있습니까?

나는 이것이 작동한다는 것을 안다.

wget http://example.com/file.rar; 지금 셧다운

그러나 내가 입력 만하면 어떻게됩니까?

wget http://example.com/file.rar

2
&& 및 || 사용을 고려하십시오 대신에 ;. && 및 || 다음 명령을 실행하기 전에 이전 명령의 반환 값을 확인하십시오. wget이 실패하는 경우 종료하지 않을 수 있습니다.
KFro September

답변:


31

다음과 같이 할 수 있습니다 :

  1. ctrl-z로 wget 실행을 중지하십시오 (중지되지 않고 일시 중단됨)
  2. 배경에 넣습니다 (bg)
  3. 실행 : 기다림; shutdown -h now

wait는 현재 쉘에서 백그라운드로 실행 된 모든 프로그램, 즉이 wget을 기다립니다.

대기 후 완료-종료가 진행됩니다.


완료되면 wget 인스턴스를 포 그라운드 (fg)하는 것을 잊지 마십시오. wget이 이미 실행 중이면 ^ z (control-z)를 사용하여 포 그라운드에 넣을 수 있습니다.
Andrew Scagnelli

4
진행률 표시 줄을 실제로보고 싶지 않으면 필요하지 않습니다.
dmckee

기계를 그대로두고 셧다운했기 때문에 필요하지 않습니다.
Wolf

11

다른 쉘에서

ps -u <your username> | grep wget

기다릴 명령의 PID를 찾은 다음

wait <PID>; shutdown -h now

프로세스가 종료 될 때까지 종료되지 않습니다. depesz 's answer 도 참조하십시오 .


+1, 단지 참고 : wait같은 쉘에서 시작한 명령에 대해서만 작동
Chriki

4

내 해결책은 이것입니다 : Control + Z로 장기 실행 작업을 일시 중단 한 다음 다음과 같이 입력하십시오.

fg; echo "Done!"

명령의 성공 또는 실패에 따라 다르게 반응하도록하려면 && 및 || 단락 연산자로.

fg && echo "Success!" || echo "Failure!"

편집 : 암호를 요구하기 때문에 sudo에서는 작동하지 않습니다. 따라서 sudo를 사용하여 예제를 제거했습니다. 두 번째 작업에 sudo가 필요한 경우 여기에 게시 된 다른 방법을 사용하십시오.

반면에, 그놈과 KDE는 적절한 D-Bus 신호 등을 보내서 sudo를 사용하지 않고 종료 / 재부팅을 트리거하는 방법을 제공한다고 생각합니다.


+1은 fg...이지만 sudo비밀번호를 묻는 메시지가 표시되면 문제가 될 수 있습니다.
mark4o

흠. 예, 무언가가 끝났을 때 물건을 sudoing하기 위해이 트릭을 사용하지 않았습니다. sudo의 경우 다른 트릭이 필요합니다. 그에 따라 게시물을 편집하겠습니다.
Ryan C. Thompson

내 목적을 위해이 답변은 프로세스를 자동으로 포 그라운드로 되돌려 놓음으로써 우수합니다.
Cookie

또한 sudo의 비밀번호를 비활성화 할 수 있습니다 (사용자 및 명령 당). 사용자가 sudo를 통해 한 번 종료 할 수 있으면 항상 그렇게 할 수 있습니다. 악의적 인 종료는 경우에 따라 위험하지 않을 수 있습니다. 실행중인 컴퓨터에서 손상된 게스트 액세스만큼 위험하지는 않습니다.
Cookie

1

예, 두 번째 명령을 입력하고 Enter를 누르십시오. 현재 프로그램이 텍스트를 스크롤하는 경우 올바르게 입력 한 내용을 볼 수 없으므로 키를 보면서 올바르게 수행하십시오.

더 똑똑한 방법은 다른 TTY (CTRL + ALT + F1-F6)로 전환하여 명령을 동시에 실행하거나 화면과 같은 명령 줄 프로그램을 사용하는 경우 새 창을 만들 수 있습니다.


첫 번째 옵션은 +1입니다. 두 번째 옵션이 어떻게 작동하는지 이해하지 못합니다.
innaM September

예를 들어 Ctrl + Alt + F2를 누르면 로그인하고 명령을 입력 할 수있는 새로운 두 번째 콘솔로 전환됩니다. 이런 식으로 두 번째 명령을 실행할 수 있습니다. 둘째, 화면 (더 멋진 방법으로 콘솔을 사용하는 프로그램)을 다운로드하면 다시 로그인 할 필요없이 명령을 다시 입력 할 수있는 두 번째 탭 / 창을 열 수 있습니다. 그러나 동시에 필요로하므로 옵션 1을 유지할 수는 있지만 동일한 효과를 얻는 다른 방법은 없다고 생각합니다. 프로세스가 여전히 실행중인 경우 다른 TTY / 창을 사용하여 스크립트를 확인하지 않는 한. :-P
타마라 Wijsman

dmckee의 답변에서 wait PID를 사용하십시오
Cookie

1

화려하고 싶다면 wget의 반환 상태를 확인하고 성공한 경우에만 종료하십시오.

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi

2
이 방법은 스크립팅 할 때 좋은 방법이지만 wget실행 중에는 테스트를 빌드하라는 프롬프트가 표시되지 않습니다.
dmckee

이것을 내 Control-Z 및 fg 트릭과 결합하여 해결할 수 있습니다.
Ryan C. Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.