cd folder1
ls | xargs -t -I {} {}/MyScript.sh param1 param2 &
上面的命令不起作用。
我不确定为什么 {} 没有被子文件夹替换。我该如何解决这个问题?
问题摘要:以下作品:ls | xargs -t -I '{}' ksh '{}'/MyScript.ksh param1 param2
cd folder1
ls | xargs -t -I {} {}/MyScript.sh param1 param2 &
上面的命令不起作用。
我不确定为什么 {} 没有被子文件夹替换。我该如何解决这个问题?
问题摘要:以下作品:ls | xargs -t -I '{}' ksh '{}'/MyScript.ksh param1 param2
经过一些实验,这不起作用:
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 可能需要引用它。)