这是我的剧本:
env -i MY_KEY=$my_key MY_ACCOUNT=$my_account command-that-outputs-a-list \
| grep "name" | awk -v src=$src \
'{a = substr($2,2, length($2)-3); print "my_copy_cmd -s xx-yy/"src"/"a" -d . "}'
并输出如下内容:
my_copy_cmd -s xx-yy/source-file-name -d .
my_copy_cmd -s xx-yy/source-file-name -d .
my_copy_cmd -s xx-yy/source-file-name -d .
my_copy_cmd -s xx-yy/source-file-name -d .
现在,我只想在同一行中执行它,但是xargs
使 all 进入一行参数(并且它不会运行)。 xargs -0
也不起作用。我想使用env -i
来运行它,使其在没有变量的环境中运行,并临时设置我的env变量(=就像我在第一个命令中所做的那样),例如(不起作用):
env -i MY_KEY=$my_key MY_ACCOUNT=$my_account command-that-outputs-a-list \
| grep "name" | awk -v src=$src \
'{a = substr($2,2, length($2)-3); print "my_copy_cmd -s xx-yy/"src"/"a" -d . "}' \
| xargs env -i MY_KEY=$my_key MY_ACCOUNT=$my_account
答案 0 :(得分:1)
这项工作:
async
env -i MY_KEY=$my_key MY_ACCOUNT=$my_account command-that-outputs-a-list \
| grep "name" | awk -v src=$src \
'{a = substr($2,2, length($2)-3); print "my_copy_cmd -s xx-yy/"src"/"a" -d . "}'|while read z;do $z 2>&1 ;done
将从输出中读取每一行,并执行它。
答案 1 :(得分:0)
尝试将输出管道输送到sh
或bash
中。您可以通过在命令前添加赋值来设置变量:
$ echo 'echo variable is $my_var' | my_var=foo bash
variable is foo
所以这样的事情应该起作用:
env -i MY_KEY=$my_key MY_ACCOUNT=$my_account command-that-outputs-a-list \
| grep "name" | awk -v src=$src \
'{a = substr($2,2, length($2)-3); print "my_copy_cmd -s xx-yy/"src"/"a" -d . "}' \
| MY_KEY=$my_key MY_ACCOUNT=$my_account bash
我发现在实际执行命令之前汇编和预览一批命令是一个很好的技巧。