Linuxのコマンドラインでn秒ごとにコマンドを繰り返すことは可能ですか。
たとえば、インポートを実行していて、実行しているとします。
ls -l
ファイルサイズを確認するために増加しています。これを自動的に繰り返すようにコマンドを入力したいのですが。
5秒ごとに見てください...
watch -n 5 ls -l
変更を視覚的に確認したい場合は、ls
コマンドの前に--differences
を追加してください。
OSXのmanページによると、
--cumulativeオプションを使用すると、「スティッキー」が強調表示され、これまでに変更されたすべてのポジションが連続して表示されます。 -tまたは--no-titleオプションを指定すると、間隔、コマンド、および現在の時刻を画面上部に表示するヘッダーと、それに続く空白行がオフになります。
Linux/Unixのmanページは こちら にあります。
while true; do
sleep 5
ls -l
done
"watch"はBusyboxの秒の端数を許可しませんが、 "sleep"は許可します。それがあなたにとって重要なら、これを試してみてください。
while true; do ls -l; sleep .5; done
sleep
はすでに0
を返します。そのため、私は使っています:
while sleep 3 ; do ls -l ; done
これはmikhailのソリューションよりも少し短いです。小さな欠点は、ターゲットコマンドを初めて実行する前にスリープすることです。
コマンドにパイプや引用符などの特殊文字が含まれている場合は、コマンドを引用符で埋め込む必要があります。たとえば、ls -l | grep "txt"
を繰り返すには、watchコマンドは次のようになります。
watch -n 5 'ls -l | grep "txt"'
while
を使用すると、cronなしで定期的にコマンドを実行することが可能です。
コマンドとして:
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 &
とタイプして実行してください。
時計はいいですが、画面をきれいにします。
watch -n 1 'ps aux | grep php'
「ドリフト」を避けたい場合、コマンドの所要時間に関係なくコマンドをN秒ごとに実行する必要があります(N秒未満と仮定)。これは、5秒ごとにコマンドを1回繰り返すというbashです。 2番目の精度(そしてそれが追いつかない場合は警告を表示します):
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コマンドをクリエイティブに使用することで、この精度を向上させることができます。
以下を実行してサイズのみをフィルタリングできます。あなたのファイルがsomefilename
と命名されたならば、あなたは以下をすることができます
while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
たくさんのアイデアのひとつ。
特定の回数だけ何かをしたい場合は、いつでもこれを実行できます。
repeat 300 do my first command here && sleep 1.5
ドリフトをより簡単に最小化するには、次のようにします。
while :; do sleep 1m & some-command; wait; done
ループ構造を実行するためのbashの時間と実際に実行するためのsleepコマンドが原因で、まだわずかなドリフトがあるでしょう。
ヒント: ':'は0になります。つまりtrueです。
簡潔なソリューション。これは、コマンドが失敗するまで繰り返し実行したい場合に特に役立ち、すべての出力を表示できます。
while ls -l; do
sleep 5
done
watch -n 5 'ls -l
5秒ごとにls -l
コマンドを実行します
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