Linux 如何执行在匹配模式的每一行上都有多个参数的命令
我已尝试以下命令:Linux 如何执行在匹配模式的每一行上都有多个参数的命令,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我已尝试以下命令: while read line; do $(/usr/bin/xyz argument1 argument2) echo '$line' done <<< $(/usr/bin/xyz argument1 argument3) | grep Off | awk '{print $1,$3}' 列1和3的所有信息都应该传递给while循环,该循环读取每一行并在每一行上执行命令 while read line do $(/usr/bin
while read line;
do
$(/usr/bin/xyz argument1 argument2)
echo '$line'
done <<< $(/usr/bin/xyz argument1 argument3) | grep Off | awk '{print $1,$3}'
列1和3的所有信息都应该传递给while循环,该循环读取每一行并在每一行上执行命令
while read line
do
$(/usr/bin/xyz argument1 argument2)
echo '$line'
done <<<
读取行时
做
$(/usr/bin/xyz argument1 argument2)
回显“$line”
完成你可以这样写
while read arg1 arg2;
do
/usr/bin/xyz arg1 arg2;
done < <(/usr/bin/xyz otherargument1 otherargument3 | awk '/Off/{print $1,$3}')
读取arg1 arg2时;
做
/usr/bin/xyz arg1 arg2;
仅为了简化代码而不更改逻辑:
while read line; do
$(/usr/bin/xyz argument1 argument2)
echo "$line"
done <<< $(/usr/bin/xyz argument1 argument3) | awk '/Off/ {print $1, $3}'
我将引号从单引号(“
)更改为双引号(”
),因为使用单引号时,它将始终输出$line
(字面意思),而使用双引号时,它将输出该变量的内容
$(/usr/bin/xyz argument1 argument2)
这将运行/usr/bin/xyz argument1 argument2
,获取输出,然后对其进行评估。如果您无法正确控制可能运行的内容,这可能会带来安全风险。例如,假设/usr/bin/xyz
实际上是echo
。那么我们可以:
$(echo argument1 argument2)
这意味着while
循环将尝试使用选项argument2
执行argument1
。这是您想要的吗
如果您可以提供来自$(/usr/bin/xyz argument1 argumentnmt2)
和$(/usr/bin/xyz argument1 argument3)| grep off | awk'{print$1,$3}'
的一些示例输出,您的$(..)
construct非常勇敢,但肯定是可能的,但除此之外-你的问题是什么?while循环的输出被管道传输到grep Off | awk'{print$1,$3}'
。循环的输入是usr/bin/xyz argument1参数3的输出
$(/usr/bin/xyz argument1 argument2)
$(echo argument1 argument2)
/usr/bin/xyz argument1 argument3 | while read line; do
/usr/bin/xyz argument1 argument2
echo "$line"
done | awk '/Off/ {print $1, $3}'
/usr/bin/xyz argument1 argument3 | awk '/Off/ {print $1, $3}' \
| while read line; do
/usr/bin/xyz argument1 argument2
echo "$line"
done