몇 초 후 명령 실행 (절전없이)


15

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

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

sleep 5 ; ls > a.txt

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


쉘 없이는 왜 작동하지 않습니까? 어떤 오류가 발생합니까? 전체 경로를 전달하고 있습니까? 어느 부분이 구문 분석되는지 알고 ;있습니까?
Hennes

이런 식으로 쉘은 5 초를 차단 한 다음 명령을 실행합니다., 쉘이 정지 될 필요는 없습니다.
Martin

그런 다음 백그라운드의 스크립트 또는 하위 셸에서 시작해야합니다.
Hennes

답변:


34

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의 제안이 더 좋습니다.


나는 $(sleep 5; echo foo) &왜 내가 그 앞에 $가 필요하다고 생각했는지 잘 모르겠지만 구문이 잘못되어 더 길고 이해하기 쉬운 버전을 게시했습니다. (command_for_in_new_shell)는 짧습니다.
Hennes

@Hennes와 나는 당신의 아주 좋은 아이디어를 뻔뻔스럽게 찢어 버렸습니다. 내가 한 것은 더 짧게 다시 포맷하는 것이 었습니다. 실제 사고 비트에 대한 모든 크레딧은 당신입니다. :).
terdon

at몇 초 만 에 사용할 수있는 방법이 있습니까?
기금 모니카의 소송

@NicHartley 번호 at 21:43원하는 시간 인 경우 특정 시간 (예 :)을 사용 하거나 4 초 후에 sleep 4 && command실행하는 것과 같은 간단한 작업 을 수행하십시오 command.
terdon

4

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

예:

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

foo 5 초 후에 출력이 나타납니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.