如何通过输入执行命令行

时间:2020-08-28 09:48:03

标签: linux shell

我已经读过thisthis,但是没有用。

这是我的剧本:

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 

2 个答案:

答案 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)

尝试将输出管道输送到shbash中。您可以通过在命令前添加赋值来设置变量:

$ 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

我发现在实际执行命令之前汇编和预览一批命令是一个很好的技巧。