df -h
の出力をプローブして、パーティションの1つが[またはほとんど]領域を超えたときに警告できるワンライナーを作成しようとしています。 xargsを使用しているので、今はお尻を蹴っている...
echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please"
2番目の{}にも「95」を表示するにはどうすればよいですか?
その&&
は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置換文字列だけです。
より読みやすい別の方法は、他のすべてのコマンドを含む個別の関数を定義し、サブシェルで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"'