xargs:在多个命令中使用相同的参数


17

我正在尝试编写一种单行代码,以探测df -h分区的输出并在分区之一(或几乎)没有空间时发出警报。使用xargs的部分现在把我踢了屁股...

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

如何使第二个{}也显示“ 95”?

Answers:


23

&&不是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替换字符串。


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"'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.