Linux에서 자동으로 명령 반복


303

Linux 명령 행에서 n 초 마다 명령을 반복 할 수 있습니까?

가져 오기를 실행 중이고 있습니다.

ls -l

파일 크기가 커지고 있는지 확인하십시오. 이 작업을 자동으로 반복하도록 명령하고 싶습니다.

답변:


541

5 초마다 시청 ...

watch -n 5 ls -l

변경 사항을 시각적으로 확인 --differences하려면 ls명령 전에 추가 하십시오 .

OSX 매뉴얼 페이지에 따르면

--cumulative 옵션은 강조 표시를 "고정"하여 변경 한 모든 위치를 계속 표시합니다. -t 또는 --no-title 옵션은 디스플레이 맨 위에 간격, 명령 및 현재 시간과 다음 빈 줄을 표시하는 헤더를 끕니다.

Linux / Unix 매뉴얼 페이지는 여기 에서 찾을 수 있습니다


4
니스 -이 명령 행에 결과를 추가하지에 대한 불쌍
마티 월러스를

1
변경 사항을 강조 표시 할 수있는 답변 옵션이 추가되었습니다
Rawkode

3
예를 들어,보고있는 명령의 일부인 특수 문자를 이스케이프해야합니다. watch mysql dbname -e \"show processlist\;\"
pfrenssen

11
brew install watch
Josh Unger

1
Mac OS X 10.10에 시계가 설치되지 않음
João Nunes

118
while true; do
    sleep 5
    ls -l
done

10
watch또한 화면을 지우면 불행한 부작용이 있으므로 루프가 유용 할 때가 있습니다. 사용할 출력은 원하는 출력 형식에 따라 다릅니다.
윌리엄 퍼셀

일반적으로 루프를 수행하지만 한 줄에 수행합니다. 시계는 훨씬 나아 보이지만 전환해야합니다.
돈 브랜슨

1
@MartyWallace 이것은 명령 행 (the while 루프)으로 수행 할 수 있습니다.
keyser

그것의 가치가 사용할 수있는 지적 --differences(당신은 터미널의 재 도장에 대해 우려하는 경우)이를 강조하도록
Rawkode

이보다 낫다 watch. 예를 들어, 각 호출에서 난수를 생성하려는 경우 (예 :) 시계가 작동하지 않습니다 watch -n 1 echo ${RANDOM}. 무작위는 한 번만 호출됩니다.
Marcin

92

"시계"는 Busybox에서 몇 분의 1 초를 허용하지 않지만 "sleep"은 허용합니다. 그것이 당신에게 중요하다면, 이것을 시도하십시오 :

while true; do ls -l; sleep .5; done

1
이것은 출력을 어딘가에 파이프로 연결해야하는 경우에 유용합니다 (예 : bar aint recursive)
Stephen Smith

1
감사. watch 명령이없는 busybox 콘솔에서 작동합니다. 시스템의 가동 시간을 측정하는 데 사용했습니다. 가동 시간을; 수면 1; 완료
Santiago Villafuerte

내가 사용하고있는 busybox (v1.11.2)의 이전 버전에서 FWIW는 시계가 없으며 수면은 분수를 지원하지 않습니다. 그러나 수면 1을 성공적으로 사용할 수 있습니다.
moodboom

이것은 cygwin에서 이것을 실행하는 좋은 방법입니다
Bradley

34

sleep이미를 반환합니다 0. 따라서 다음을 사용하고 있습니다.

while sleep 3 ; do ls -l ; done

이것은 mikhail의 솔루션보다 약간 짧습니다. 사소한 단점은 대상 명령을 처음 실행하기 전에 휴면 상태라는 것입니다.


18

명령에 파이프 및 따옴표와 같은 특수 문자가 포함 된 경우 따옴표로 명령을 채워야합니다. 예를 들어을 반복 ls -l | grep "txt"하려면 watch 명령은 다음과 같아야합니다.

watch -n 5 'ls -l | grep "txt"'


나는 문제가 제대로 파이프의 발현에 대한 작업에 시계를 받고 있고 있었다, 그러나이를 읽은 후 나는 :) 그것을 고칠 수
먹어 엘리시움

13

cron을 사용하지 않고 주기적으로 명령을 실행할 수 있습니다 while.

명령으로 :

while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]

예:

while true
do echo "Hello World"
sleep 100
done &

&루프를 백그라운드에 배치 하므로 마지막 을 잊지 마십시오 . 그러나 "ps -ef | grep your_script"명령으로 프로세스 ID를 찾은 다음 프로세스 ID를 종료해야합니다. 스크립트를 실행할 때 '&'를 친절하게 추가하십시오.

# ./while_check.sh &

다음은 스크립트와 동일한 루프입니다. "while_check.sh"파일을 작성하여 다음에 넣으십시오.

#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done

그런 다음 입력하여 실행하십시오. bash ./while_check.sh &


& & 마지막에 명령을 쓰지 않고 & : bash ./while_check.sh &?
ransh

@ransh : ./while_check.sh 스크립트를 실행할 수 있으므로 프로세스 ID를 즉시 얻을 수 있습니다. 스크립트에 &를 추가하고 &없이 스크립트를 실행하면 프로세스 ID를 얻지 못했지만 실행됩니다. 내가 편집 한 것처럼 스크립트를 중지 해야하는 경우 프로세스 ID를 얻으려면 ps 명령이 필요합니다.
Ranjithkumar T

원하는 경우 echo $!각 백그라운드 프로세스가 시작된 후 스크립트를 수정할 수 있습니다 . 백그라운드에서 마지막으로 시작된 하위 프로세스의 PID입니다.
Jonathan Leffler

echo `date` 그냥 가난하고 약간 버그가 많은 방법 date입니다. 버그는에 대한 인수 인용이없는 것과 echo관련이 있습니다.의 쓸모없는 사용을echo
tripleee 2019 년


6

"드리프트 (drift)"를 피하고 싶다면, 명령이 걸리는 시간 (N 초 미만이라고 가정)에 관계없이 명령이 N 초마다 실행되기를 원한다는 것을 의미합니다. 두 번째 정확도 (그리고 유지할 수 없다면 경고를 인쇄합니다) :

PERIOD=5

while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done

수면이 1 초까지만 정확하기 때문에 여전히 약간 표류 할 수 있습니다. date 명령을 창의적으로 사용하여이 정확성을 향상시킬 수 있습니다.


고마워 ..하지만 두 가지 질문이 있습니다. 1- 코드를 저장할 위치는? 다시 말해서, 어느 경로에 해당 스크립트가 포함 된 파일을 넣어야합니까? 그것이 자동으로 실행되게 하는가?! 2- 내 코드를 모두 입력하는 대신 PHP 파일을 (# do command)에 포함시키는 방법은 무엇입니까?
Hossam

1
bash 스크립트에 대해 조금 연구하여 스크립트 실행 방법의 기본 사항을 이해할 수 있도록 제안합니다.
mcote

4

특정 횟수만큼 무언가를하고 싶다면 항상 이렇게 할 수 있습니다.

repeat 300 do my first command here && sleep 1.5

8
bash do for x in {1..300} ; do 명령어 ||break;sleep 1.5; done
Jasen

4

다음을 실행하고 크기 만 필터링 할 수 있습니다. 파일이 호출 된 somefilename경우 다음을 수행 할 수 있습니다

while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done

많은 아이디어 중 하나.


2

드리프트를보다 쉽게 ​​최소화하려면 다음을 사용하십시오.

while :; do sleep 1m & some-command; wait; done

루프 구조를 실행하는 bash 시간과 실제로 실행하는 sleep 명령으로 인해 여전히 약간의 드리프트가 있습니다.

힌트 : ':'은 0으로 바뀝니다. 즉, 참입니다.


1
watch -n 5 'ls -l 

ls -l5 초마다 명령을 실행합니다

출력 :-

Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017

total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop

1

간결한 솔루션으로, 명령이 실패 할 때까지 명령을 반복적으로 실행하려는 경우 특히 유용하며 모든 출력을 볼 수 있습니다.

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