我有一个试图为文件生成uuid的命令:

find -printf "%P\n"|sort|xargs -L 1 echo $(uuid)

但在结果中,xargs只执行一次$(uuid)子shell:
8aa9e7cc-d3b2-11e4-83a6-1ff1acc22a7e file1
8aa9e7cc-d3b2-11e4-83a6-1ff1acc22a7e file2
8aa9e7cc-d3b2-11e4-83a6-1ff1acc22a7e file3

是否有一个行程序(即不是函数)来获取xargs对每个输入执行一个subshell命令?

最佳答案

这是因为$(uuid)在当前shell中被展开。可以显式调用shell:

find -printf "%P\n"| sort | xargs -I '{}' bash -c 'echo $(uuid) {}'

顺便说一下,我将使用以下命令:
find -exec bash -c 'echo "$(uuid) ${1#./}"' -- '{}' \;

没有xargs

关于bash - xargs可以为每个参数执行一个subshel​​l命令吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29278466/

10-15 13:47