계속하기 전에 어떻게 쉘 스크립트를 일시 중지합니까?


705

사용자 입력을 기다리는 방법 만 찾았습니다. 그러나 while true내 컴퓨터가 충돌하지 않도록 일시 중지하고 싶습니다 .

나는 시도 pause(1)했지만 그것은 말한다 -bash: syntax error near unexpected token '1'. 어떻게 할 수 있습니까?

답변:


1235

sleep명령을 사용하십시오 .

예:

sleep .5 # Waits 0.5 second.
sleep 5  # Waits 5 seconds.
sleep 5s # Waits 5 seconds.
sleep 5m # Waits 5 minutes.
sleep 5h # Waits 5 hours.
sleep 5d # Waits 5 days.

시간 단위를 지정할 때 소수를 사용할 수도 있습니다. 예 :sleep 1.5s


12
나는 항상 그것을 잊었다 sleep! ( pause, wait또는 delay더 이해하고 기억하기 쉬울 것입니다.)
Geremia

47
Mac OS X에서는 s, m, h 또는 d가 영향을 미치지 않습니다. 시간을 초 단위로 지정해야합니다.
AI Architect

6
이름은 우리가 thread.sleep많은 프로그래밍 언어에서 기능 하기 때문에 @Geremia
Amin_mmz

89

그리고 어떻습니까 :

read -p "Press enter to continue"

35
실제로 이것은 OP에 응답하지 않더라도 질문에 대답했습니다.
Jesse Chisholm

9
이것은이 게시물과 관련이 없습니다.
Murtadha S.

7
@murtadhaalsabbagh, 그러나 Google 색인 생성과 많은 관련이 있습니다. :) 나에게도 도움이되었습니다.
Iulian Onofrei 2016 년

read -p "계속하려면 Enter 키를 누르십시오"-t 1은 1 초 동안 일시 중지해야합니다.
SzB

@JesseChisholm 사람들이 powershell / cmd와 같은 배쉬를 찾고 있다고 생각합니다PAUSE
rovyko

66

Python (질문은 원래 Python으로 태그 지정됨)에서 시간 모듈을 가져와야합니다.

import time
time.sleep(1)

또는

from time import sleep
sleep(1)

쉘 스크립트의 경우는

sleep 1

어느 sleep명령을 실행합니다 . 예./bin/sleep


5
예, 이것도 말합니다. 다른 것이 처음이었고 좋은 예가 있습니다 :) 그러나 +1!

3
하지 올바른 방법으로 그것을 할 동안 그래서, 당신은 사용하여 배쉬와 파이썬 답을 결합 할 수 있습니다 python -c "import time; time.sleep(1)"대신 sleep 1:
베리 M.

2
@BerryM. -시도 할 때 약 1.2 초가 걸립니다. 파이썬은 즉시 시작되지 않습니다-당신은 그것을 고려해야합니다. python -c "import time; time.sleep(0.8)"대신 만드십시오 . 그러나 파이썬 시작에 실제로 걸리는 시간을 고려해야합니다. date +%N; python -c "import time; time.sleep(0)"; date +%N파이썬을 시작하는 데 걸리는 나노초 수를 결정 하려면 이것을 실행해야합니다 . 그러나 그것은 또한 실행 날짜로 인한 약간의 오버 헤드를 포함합니다. 이를 실행 date +%N; date +%N하여 오버 헤드를 찾으십시오. 내 컴퓨터에서 파이썬의 오버 헤드는 실제로 0.14 초에 가깝습니다. 그래서 나는 원한다 time.sleep(0.86).
ArtOfWarfare

사실, 정확히 1000ms는 얻지 못할 것입니다.
Berry M.

일반적으로 사양은 주어진 시간 이상 이며 일반적으로 수면 목적에 적합합니다.
말린 피어스

40

나는 이것에 조금 늦었다는 것을 알고 있지만, 잠을 자고 원하지 않는 시간을 지나갈 수도 있습니다.

/bin/sleep 3

4 초는 다음과 같습니다.

/bin/sleep 4

5
방금 이것에 우연히 만났을 때, 거의 1 년 전에 화가 났던 @RyndallCooper의 최고 투표 답변은 -59 배 많은 포인트를 가지고 있으며 훨씬 더 깊이가 있기 때문에 이것은 가장 최근의 것으로서 여전히 위에 나타납니다.
아이도

2
@AidanEdwards "투표"(기본 설정- "활성"으로 설정 한 방법이 궁금합니다)로 정렬 할 때까지 가장 좋은 대답이었습니다. "투표"로 설정하면 문제가 해결되었습니다. 기묘한.
christianbundy

1
@stackoverflow-여러분들은 그것이 어떻게 작동하는지 바꿔야합니다 ... 항상 맨 먼저 투표하십시오!
Deian

3
"최고로 투표 된 답변이 여전히 최근에 단순히 위에 표시되기 때문입니다."-아니, 아무도 그 답변의 나쁜 내용과 관련이없는 이러한 사소한 이유로 투표를 내려서는 안됩니다.
Nicholas Petersen

35

Mac OSX에서는 잠자기 시간이 몇 분 / 초가 걸리지 않으며 몇 초 밖에 걸리지 않습니다. 2 분 동안

sleep 120

27

여러 슬립 및 명령 실행

sleep 5 && cd /var/www/html && git pull && sleep 3 && cd ..

첫 번째 스크립트를 실행하기 전에 5 초 동안 기다린 다음 디렉토리를 다시 변경하기 전에 3 초 동안 다시 휴면 상태가됩니다.


4
+1 ... cuz 만약 당신이 하나의 앰퍼샌드를 사용한다면 그것은 수면 후 자신의 스레드로 수면을 보낸 다음 즉시 다음 행동을 시작합니다 (즉, 다음 행동을 지연시키지 않습니다)
Jay Marm

18

스크립트 내에서 일시 중지하려는 작업 사이에 다음을 추가 할 수 있습니다. 5 초 동안 루틴이 일시 중지됩니다.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."

이것은 실제로 작동하지 않습니까? 나는 이 매뉴얼 페이지에 따르면 적어도-t 5 5 초 후에 스크립트가 중단 될 것이라고 생각합니다.
Brad Parks

@BradParks 예 작동합니다. root @ Joses-iPad : ~ # cat readtest.bash #! / bin / bash echo "Here"read -p "Pause Time 5 seconds"-t 5 read -p "계속" 5 초 .... "-t 5 echo"계속 .... "echo"저기 "root @ Joses-iPad : ~ # cat re./st.bash 여기서 일시 정지 시간 5 초 5 초 후에 계속 .... .... 저기
Jose H. Rosa

흠 .... 당신이 옳은 것 같아요! 나는 이것을 시도했다고 생각했지만 방금 다시 시도했으며 광고 된대로 작동합니다. 감사!
Brad Parks

5

read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s

아무 버튼이나 눌러도 계속하려면


7
이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
peacetype

1
이 답변은 코드 전용 주석입니다. 주어진 코드를 설명하려고 시도하지 않습니다. 나는 포스터가 "그 사용자 입력에 타임 아웃을하면서 동시에 사용자 입력을 기다리는 방법"으로 질문을 잘못 해석했다고 생각합니다.
Zimano

2

기본 난수 생성기 인 $ RANDOM을 사용하여 기다릴 수 있습니다. 아래에서는 240 초를 사용하고 있습니다. @를 돕는 희망

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS

1

트랩을 사용하여 실행하기 전에 일시 중지하고 명령 줄을 확인하십시오.

trap 'tput setaf 1;tput bold;echo $BASH_COMMAND;read;tput init' DEBUG

계속하려면 아무 키나 누르십시오

set -x명령 행을 디버그 하는 데 사용

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