몇 초 후 명령 실행 (절전없이) 어떻게해야합니까? 아니면 수면

절전 모드없이 X 초 후에 명령을 실행하려면 어떻게해야합니까? 아니면 수면 상태이지만 쉘이 없으면 해당 명령의 응답을 기다리는가?

나는 이것을 사용했지만 작동하지 않았다

sleep 5 ; ls > a.txt

백그라운드에서 실행해야합니다. ls5 초 후에 실행하려고하는 스크립트에서 실행 하지 않아도되고 쉘은 수면이 끝날 때까지 기다리지 않습니다.



답변

Hennes가 제안한보다 간결한 작성 방법은

(sleep 5; echo foo) &

또는 몇 초 이상이 필요한 경우을 사용할 수 있습니다 at. 다음과 같은 명령을 내리는 세 가지 방법이 있습니다 at.

  1. 그것을 파이프 :

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. 실행할 명령을 텍스트 파일로 저장 한 다음 해당 파일을 다음으로 전달하십시오 at.

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. atSTDIN에서 명령을 전달할 수도 있습니다 .

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    그런 다음을 눌러 쉘 CtrlD을 종료하십시오 at. ls명령은 1 분 실행됩니다.

의 형식으로 매우 정확한 시간을 제공 할 수 있습니다 [[CC]YY]MMDDhhmm[.ss].

$ at -t 201412182134.12 < script.sh

이렇게하면 script.sh2014 년 12 월 18 일 21:34 및 12 초에 스크립트가 실행됩니다 . 따라서 이론적으로 at향후 5 초 동안 실행할 수 있습니다 . 그러나 그것은 탱크를 사용하여 비행을 시작하는 것과 비슷하며 Hennes의 제안이 더 좋습니다.


답변

백그라운드에서 쉘이나 스크립트를 시작하여이 문제를 해결할 수 있습니다.

예:

/ bin / sh -c "sleep 5; echo foo"&
[1] 63791
> 활성 쉘 프롬프트

foo 5 초 후에 출력이 나타납니다.