xargs:複数のコマンドで同じ引数を使用


17

df -hパーティションの1つが(ほぼ)スペース不足になったときに出力をプローブして警告できるワンライナーを作成しようとしています。xargsを使用している部分が、今私を尻に蹴りつけています...

echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please"

2番目の{}も「95」と表示するにはどうすればよいですか?

回答:


23

これ&&xargsコマンドの一部ではなく、完全に独立した呼び出しです。サブシェルを明示的に実行したいと思うと思います。

echo 95 | xargs -n1 -I_percent -- sh -c '[ _percent -ge 95 ] && echo "No Space on disk _percent% full -- remove old backups please"'

シェルで余分な引用の頭痛を避けるため_percentに、代わりに使用していることに注意してください{}。これはシェル変数ではありません。まだxargsの置換文字列です。


3

より読みやすい別の方法は、他のすべてのコマンドを含む別の関数を定義し、その関数をサブシェルで呼び出すことxargsです。

したがって、たとえば:

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"'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.