Linux watch循環(huán)命令
在Linux中,我們可能會需要反復(fù)的執(zhí)行一個命令以查看狀態(tài)的變化,比如之前我在啟動一個項目的時候沒有什么反應(yīng),于是我便自己寫腳本反復(fù)
curl
這個端口,下面用輸出Hello World
舉出這個例子:
#!/bin/bash
i=1
for(($i;$i>0; i=$i+1))
do
echo 'Hello World'[$i]
sleep 1
done
我們的需求是非常簡單地,只需要不斷地間隔一秒輸出Hello World
,但是卻需要7行shell代碼,這無疑非常非常麻煩,對于我這種對shell語法不熟悉的人還很花時間。
不過,其他開發(fā)者們顯然也遇到過這種情況,并且已經(jīng)有人寫出了應(yīng)對這種情況的工具,——watch
;
Watch 命令
watch [可選參數(shù)] [命令]
加*
為常用的參數(shù)
-
-n
* : 間隔秒數(shù)(如果不寫默認(rèn)間隔2秒) -
-d
* : different,只寫這個參數(shù)的話,本次刷新發(fā)生變化內(nèi)容會高亮,再次刷新若無變化則不高亮,若是給-d加參數(shù)-d=cumulative
則變化后高亮,再次刷新沒有變化的話依舊保持高亮狀態(tài) -
-g
*: 若是輸出的內(nèi)容發(fā)生變化則退出watch狀態(tài) -
-t
: 不寫-t的話watch有一個頂上的標(biāo)題,會顯示間隔秒數(shù),當(dāng)前時間等,加上-t則不顯示該標(biāo)題 -
-b
: 若是命令因錯誤而退出,則發(fā)出警報聲 -
-e
: 停止錯誤輸出更新并在按鍵后退出命令 -
-c
: 解釋 ANSI 顏色和樣式序列 -
-x
: 將用戶定義的命令傳遞給exec,從而減少額外引用的需要 -
-w
: 關(guān)閉換行并截斷長行 -
-h
: 顯示幫助文本并退出。 -
-v
: 顯示版本信息并退出。
(1)watch 命令定義了4個觀察事件點,即 -b 方法調(diào)用前,- e 方法異常后,- s 方法返回后, f 方法結(jié)束后。有點像string里面的,切入點面向切入編程,實際上有這個前置通知,后置通知,環(huán)繞通知,異常通知還有最終通知。所以可以猜測,Arthas在編寫的時候用了同樣的代理模式,類似于string框架的模式,對他四個的觀察點進(jìn)行監(jiān)視,這個雖然沒有看到源碼,但是可以猜測應(yīng)該是這樣實現(xiàn)的。
(2)4個觀察事件點 b 、- e 、- s 默認(rèn)關(guān)閉,- f 默認(rèn)打開,當(dāng)指定觀察點被打開后,在相應(yīng)事件點會對觀察表達(dá)式進(jìn)行求值并輸出。f默認(rèn)打開,不管你有沒有出現(xiàn)異常都能夠看到結(jié)果
(3)這里要注意方法入?yún)⒑头椒ǔ鰠⒌膮^(qū)別,有可能在中間被修改導(dǎo)致前后不一致,除了 b 事件點 params 代表方法入?yún)⑼?,其余事件都代表方法出?br> (4)當(dāng)使用 b 時,由于觀察事件點是在方法調(diào)用前,此時返回值或異常均不存在
舉個??
監(jiān)控當(dāng)前時間變化
watch 'date' # 間隔2秒監(jiān)控當(dāng)前時間變化
watch -n 1 'date' # 間隔1秒監(jiān)控當(dāng)前時間變化
watch -d -n 1 'date' # 間隔1秒監(jiān)控當(dāng)前時間變化,并將當(dāng)前變化的內(nèi)容高亮顯示
watch -d=cumulative -n 1 'date' # 間隔1秒監(jiān)控當(dāng)前時間變化,并將曾經(jīng)發(fā)生過變化的內(nèi)容持續(xù)高亮顯示
watch -g 'date' # 間隔2秒監(jiān)控時間變化,若是時間發(fā)生了變化則退出watch
以上的最后一條命令是一定會在2秒之后退出的,因為秒數(shù)從
i
變成了i+2
,觸發(fā)了「輸出內(nèi)容發(fā)生變化」,因此直接退出watch狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-420374.html
?? 參考資料
「PhoneixNAP」: How to Use the Linux watch Command with Examples
「阿里云開發(fā)者社區(qū)」:Watch 命令的參數(shù)介紹 | 學(xué)習(xí)筆記文章來源地址http://www.zghlxwxcb.cn/news/detail-420374.html
到了這里,關(guān)于Linux 反復(fù)執(zhí)行一條命令--watch命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!