어떤 이유로 (오류 또는 다른 이유로) 명령이 완료 될 때마다 명령을 계속 다시 실행하는 간단한 방법을 찾으려고합니다.
이것에 접근하는 가장 좋은 방법은 무엇입니까?
편집 : 나는 충분히 명확하지 않았다. 이전 실행이 끝날 때까지 다음 실행을 기다려야 합니다.
편집 2 : 거의 모든 답변이 훌륭하게 작동합니다. 실수로 대부분의 답변이 프로세스를 포크하거나 다시 한 번만 다시 실행한다고 생각했습니다.
어떤 이유로 (오류 또는 다른 이유로) 명령이 완료 될 때마다 명령을 계속 다시 실행하는 간단한 방법을 찾으려고합니다.
이것에 접근하는 가장 좋은 방법은 무엇입니까?
편집 : 나는 충분히 명확하지 않았다. 이전 실행이 끝날 때까지 다음 실행을 기다려야 합니다.
편집 2 : 거의 모든 답변이 훌륭하게 작동합니다. 실수로 대부분의 답변이 프로세스를 포크하거나 다시 한 번만 다시 실행한다고 생각했습니다.
답변:
이것은 계속 반복해서 실행되는 무한 루프를 만듭니다 command
.
while :
do
command
done
while true; do echo 'Hit CTRL+C'; sleep 1; done
, 감사하는 cyberciti.biz/faq/bash-infinite-loop
watch
명령은 지정된 간격으로 영원히 명령을 반복합니다 :
watch -n0 <command>
-n
0으로 설정 하면 간격이 전혀 없어집니다 (실제로는 0.1 초라고 생각합니다).
watch
또한 시각적 변경 사항을 쉽게 볼 수 있도록 출력을 정렬 할 수있는 추가 이점이 있으며 마지막 실행의 변경 사항을 강조 표시하는 스위치가 있습니다.
watch는 명령을 반복해서 실행하여 출력을 표시합니다 (첫 번째 화면 가득 참). 이를 통해 시간에 따른 프로그램 출력 변경을 볼 수 있습니다. 기본적으로 프로그램은 2 초마다 실행됩니다. 다른 간격을 지정하려면 -n 또는 --interval을 사용하십시오.
중단 될 때까지 시계가 실행됩니다.
watch ls
파일이 들어있는 디렉토리에 있다면 아무 것도 얻지 못한다고 말하는가 ?
간단한 해결책은 다음과 같습니다.
yourcommand; !#
;
명령을 분리하여 한 줄에 여러 명령을 허용합니다 ( Bash : Lists )
!#
bash에게 "지금까지 쓴 모든 내용을 반복합니다"( Bash : Event-Designators )
yourcommand; !!
실제로 같은 줄에서 명령으로 작동하지 않기 때문에 !#
그렇게 보입니다. 건배!
; !#
대화식이 아닌 경우 명령 실행 중에 미리 계획 !!
하고 이전 명령을 다시 실행할 명령을 입력 할 수 있습니다. 이것은 예를 들어 동안 작동합니다 ping -c 5
.
다음에서 함수를 정의 할 수도 있습니다 bash
.
function repeat { "$@"; "$@"; }
이를 유지하려면에 저장하십시오 ~/.bashrc
.
그런 다음 다음과 같이 명령을 실행할 수 있습니다.
repeat ping -c5 heise.de
당신이 반복적으로 실행 (그리고 예하지하고자하는 특정 명령이라면 어떤 명령을), 당신은 대체 할 수있는 "$@"
실제 명령으로 그 코드에서, 그리고 기능 등의 이름을 repeat_ping
대신.
무한 루프로 만들기 위해 @Dennis가 제안하는 것을 할 수 있습니다. 다음과 같이 대화식 쉘에서 이것을 사용하려면 대기 시간을 추가하는 것이 좋습니다.
function repeat { while 1 ; do "$@" ; sleep 1 ; done; }
그렇지 않으면를 사용하여이 무한 루프를 중단하는 것이 다소 불편합니다 Ctrl-Z
.
while
루프에 다음과 같은 부울 조건을 제공하십시오 .
#!/bin/bash
while true; do
do_something && wait
done
이것은 bash가 프로세스를 종료하라는 신호를받을 때까지 계속해서 실행됩니다. 일반적으로의 형태로 ctrl+c
.
watch
명령을 사용하여 스크립트를 반복적으로 실행할 수도 있습니다 . 예를 들어 bash 터미널의 간단한 시계 watch
는 다음과 같습니다.
$ watch -t -n1 date +%T
이 -t
옵션 watch
은 실행중인 프로세스의 제목을 표시하지 않도록 지시 합니다. 반복되는 명령 만 깔끔하게 출력합니다. 이 -n1
옵션은 매초마다 시계가 반복되도록합니다 n
. 이 경우 초 -n1
간격이 1
됩니다. 그런 다음 date +%T
명령은 명령 완료시 시간을 표시합니다. 이 명령을 수행하면 터미널에서 활성 시계가 제공됩니다.
그리고 다른 답변에없는 또 다른 방법은 무한 함수 호출입니다.
do_something() { do_something }; do_something && wait
이것은 while
재귀 함수 호출 만 사용 하는 부울 루프 와 본질적으로 동일 합니다.
(편집) 머신의 리소스를 염두에두고 && wait
프로세스를 실행할 때마다 다음 반복 전에 프로세스가 종료 상태 0으로 끝날 때까지 루프가 "대기"되도록 추가했습니다 . 이것은 대화식 쉘 스크립트에서 유용합니다.
while
루프 예는하지만 부울 사용하지 않는 true
구문을. 거기에있다 watch
예는하지만 많은 유용한 구문을 제공하지 않습니다. 나는 그것이 도움이 될 수있는 사람들을 위해 이것들을 설명하고 있습니다. 나는 이것들에 실질적인 유용성을주고 싶었다. while
루프 부울도 할 수 있습니다 false
및 허위 조건이 충족 될 때까지 실행할 수 없습니다. 꽤 편리합니다.
if
재실행 은 어떻게 계속됩니까?
이것은 bash에서 명령을 반복하는 데 사용하는 또 다른 방법입니다. 스크립트 작성과 관련이 없으며 많은 사람들에게 알려지기 때문에 일부에게는 어리석게 들릴 수 있습니다. 그러나 기억해야 할 구문이 많지 않다는 점에서 빠르고 초보자에게 친숙하기 때문에 언급 할 가치가 있다고 생각합니다. 우분투의 그놈 터미널에서만 이것을 테스트했으며 다른 터미널은 이것을 지원하지 않을 수 있습니다.
각 명령이 완료 될 때까지 붙여 넣기를 기다릴 필요가 없습니다. 붙여 넣은 명령이 대기열에 들어가고 차례로 실행됩니다.