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


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.