320

Linuxコマンドラインでn秒ごとにコマンドを繰り返すことは可能ですか?

たとえば、インポートを実行していて、実行しています

ls -l

ファイルサイズが増加しているかどうかを確認します。これを自動的に繰り返すコマンドが欲しいです。

4

13 に答える 13

567

5秒ごとに見る...

watch -n 5 ls -l

変更を視覚的に確認したい場合は--differences、コマンドの前に追加しますls

OSXのマニュアルページによると、

--cumulative オプションは強調表示を「固定」し、これまでに変更されたすべての位置の実行中の表示を提示します。-t または --no-title オプションは、間隔、コマンド、およびディスプレイ上部の現在の時刻を示すヘッダーと、それに続く空白行をオフにします。

Linux/Unix の man ページはここにあります

于 2012-11-27T21:51:47.167 に答える
124
while true; do
    sleep 5
    ls -l
done
于 2012-11-27T21:52:31.593 に答える
95

"watch" は、Busybox で秒の端数を許可しませんが、"sleep" は許可します。それがあなたにとって重要な場合は、これを試してください:

while true; do ls -l; sleep .5; done
于 2012-11-27T23:26:01.267 に答える
15

を使用すると、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を見つける必要があり、それを強制終了する必要があります。そのため、スクリプトを実行するときに「&」を追加してください。

# ./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 &

于 2013-10-13T07:41:10.720 に答える
8

時計は良いですが、画面をきれいにします。

watch -n 1 'ps aux | grep php'
于 2016-03-31T02:02:33.137 に答える
6

「ドリフト」を回避したい場合、つまり、コマンドにかかる時間に関係なく、N 秒ごとにコマンドを実行する場合 (N 秒未満であると仮定)、コマンドを 5 秒ごとに 1 回繰り返す bash を次に示します。秒の精度 (それが追いつかない場合は警告を出力します):

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 コマンドを創造的に使用することで、この精度を向上させることができます。

于 2013-11-04T14:45:04.683 に答える
5

特定の回数何かをしたい場合は、いつでもこれを行うことができます:

repeat 300 do my first command here && sleep 1.5
于 2013-06-27T18:05:10.440 に答える
4

以下を実行して、サイズのみをフィルタリングできます。ファイルが呼び出された somefilename場合、次のことができます

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

数あるアイデアのひとつ。

于 2012-11-27T22:14:23.227 に答える