如何在bash中正确包装多个命令调用?

时间:2012-03-28 09:36:15

标签: bash

我的问题可以通过使这个简单的命令起作用来总结:

nice -n 10 "ls|xargs -I% echo \"%\""

失败了:

nice: ls|xargs -I% echo "%": No such file or directory

删除引号使其有效,但我的意思是将多个引用的命令包装成一个以执行更复杂的操作,如:

ftphost="192.168.1.1"
dirinputtopush="/tmp/archivedir/"
ftpoutputdir="mydir/"
nice -n 19 ls $dirinputtopush | xargs -I% "lftp $ftphost -e \"mirror -R $dirinputtopush% $ftpoutputdirrecent ;quit\"; sleep 10"

2 个答案:

答案 0 :(得分:2)

尝试使用nice -n 10 bash -c 'your; commands | or_complex pipelines'作为命令。这种方式bash是二进制文件,-c之后的字符串包含由bash解释的序列,因此它可以包含管道,循环等。注意正确引用。您需要这样做,因为nice需要二进制文件,而不是shell解释的表达式。相比之下,shell内置函数(如time(但不是/usr/bin/time是一个单独的二进制文件)将接受shell表达式作为要执行的命令。它们可以因为它们被构建到shell中。 nice不是,所以它需要二进制文件才能执行。

答案 1 :(得分:2)

儿童继承了良好的价值:

nice -n 10 bash -c 'ls | xargs -I% echo %'

各个命令分别很好:

nice -n 10 ls | nice -n 10 xargs -I% echo %