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

上面的命令不起作用。

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

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

4

1 回答 1

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 可能需要引用它。)

于 2013-09-08T13:00:12.907 回答