Shell
xargs :在多個命令中使用相同的參數
我正在嘗試編寫一個單行程序,可以探測
df -h
其中一個分區的輸出並發出警報$$ or almost $$的空間。這是使用 xargs 的部分,現在讓我大吃一驚……
echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please"
我怎樣才能讓第二個 {} 也顯示“95”?
這
&&
不是xargs
命令的一部分,它是一個完全獨立的呼叫。我想你會想要顯式地執行一個子shell:echo 95 | xargs -n1 -I_percent -- sh -c '[ _percent -ge 95 ] && echo "No Space on disk _percent% full -- remove old backups please"'
另請注意,我使用
_percent
而不是{}
避免對 shell 進行額外的引用頭痛。它不是 shell 變數;仍然只是一個 xargs 替換字元串。
另一種更具可讀性的方法是定義一個單獨的函式,其中包含所有其他命令,然後
xargs
在子 shell 中呼叫該函式。因此,例如:
myfunc(){ [ "$1" -ge 95 ] && echo "No Space on disk $1% full -- remove old backups please" echo "Another command echoing $1" } export -f myfunc echo 95 | xargs -n1 -I_percent -- sh -c 'myfunc "_percent"'