Shell

xargs :在多個命令中使用相同的參數

  • March 7, 2021

我正在嘗試編寫一個單行程序,可以探測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"'

引用自:https://unix.stackexchange.com/questions/56734