如何在Unix shell中循環命令/程序,而無需將循環寫入腳本或其他應用程序。使用腳本在shell中執行命令循環
例如,我編寫了一個腳本,輸出一個光傳感器值,但我現在仍在測試它,所以我希望它通過反覆運行可執行文件在循環中運行它。
也許我還想在循環中運行「ls」或「df」。我知道我可以在幾行bash代碼中輕鬆完成此操作,但是能夠在終端中爲任何給定的命令組鍵入命令對我來說同樣有用。
如何在Unix shell中循環命令/程序,而無需將循環寫入腳本或其他應用程序。使用腳本在shell中執行命令循環
例如,我編寫了一個腳本,輸出一個光傳感器值,但我現在仍在測試它,所以我希望它通過反覆運行可執行文件在循環中運行它。
也許我還想在循環中運行「ls」或「df」。我知道我可以在幾行bash代碼中輕鬆完成此操作,但是能夠在終端中爲任何給定的命令組鍵入命令對我來說同樣有用。
您可以在一行寫它把分號,而不是回報,就像
for NAME [in LIST ]; do COMMANDS; done
在這一點上,你可以寫稱爲shell腳本編寫,你會在一個shell腳本編寫完全相同的循環,例如,repeat
,給定一個命令,運行它N次,通過簡化更改COMMANDS
與$1
。
除了接受參數之外,您可以在命令行中完成任何可以在腳本中執行的操作。早些時候,我直接在來砸鍵入此觀看目錄填滿我傳送的文件:
while sleep 5s
do
ls photos
end
這並不完全回答你的問題,但我覺得這是relavent。 shell循環的優點之一是某些命令會返回項目列表。當然,這是顯而易見的,但是你可以使用for循環來做的事情是在該列表中執行一個命令。
for $file in `find . -name *.wma`; do cp $file ./new/location/ done;
你可以變得富有創意,並做一些非常強大的東西。
這是一個強大的技術,但如果文件名中有空格,則失敗。另外,在你的例子中'{}'沒有意義。你需要一個變量:'用於$ list中的項目;做回聲「$ item」; done' – 2010-07-11 00:48:13
find是一個不好的例子,因爲它的'-exec'參數和for循環做了同樣的事情,但是以一種空間友好的方式。不過,這是一種很棒的技術,我經常使用它。 – Benson 2010-07-11 04:29:36
我推薦使用「watch」,它只是按照你想要的做,並且在每次執行命令前清理終端,所以很容易監控變化。
您可能已經擁有它了,只需試一試watch ls
或watch ./my_script.sh
即可。您甚至可以使用-n選項控制每次執行之間的等待時間(以秒爲單位),並且可以使用-d突出顯示連續運行輸出的差異。
嘗試:
運行LS每一秒:
watch -n 1 ls
運行my_script.sh每3秒,並突出顯示差異:
watch -n 3 -d ./my_script.sh
觀看節目手冊頁: http://linux.die.net/man/1/watch
謝謝,我選擇了無限的同時:while [1];做sudo ./sensorTest.py;完成 – cdated 2010-07-10 22:54:13