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