xargs无法在子文件夹中运行一个脚本

时间:2013-09-08 12:46:53

标签: xargs

cd folder1
ls | xargs -t -I {} {}/MyScript.sh param1 param2 &

上述命令不起作用。

我不确定为什么{}不会被子文件夹替换。 我该如何解决这个问题?

问题摘要: 以下作品: ls | xargs -t -I'{}'ksh'{}'/ MyScript.ksh param1 param2

1 个答案:

答案 0 :(得分:2)

经过一些实验,这不起作用:

ls | xargs -t -I {} {}/MyScript.sh param1 param2

但这样做:

ls | xargs -t -I {} sh {}/MyScript.sh param1 param2

仔细阅读手册页可以了解原因:

xargs  [...] [command [initial-arguments]]

-I replace-str
     Replace occurrences of replace-str in the initial-arguments
     with names read from standard input.

如果{}是第一个,则它是command的一部分,而不是initial-arguments,因此不会被替换。因此,您需要安排一些事情,以便{}始终是参数的一部分,而不是命令。在您的情况下,可以使用sh {}/MyScript.sh轻松完成此操作,而不是直接调用MyScript

(注意:我在这里使用bash,其中没有任何内容的{}不需要引用。其他shell可能需要引用它。)