将脚本输出放入循环bash中的变量

时间:2014-12-14 11:38:20

标签: bash loops variables

我有以下bash脚本,并希望从中运行其他脚本并捕获结果:

#!/bin/bash

while read line; do
     echo "exit" | out=`python file.py`
     if [[ $out == *"WORD"* ]]; then
        echo $line >> out.txt
     fi
done<$1

但这不适合我。在每次迭代中out都没有价值......

3 个答案:

答案 0 :(得分:2)

echo "exit" | out=`python file.py`

应该是(发送“退出”到将file.py的输出分配给out的结果 - 似乎很奇怪):

echo "exit" && out=`python file.py`

或(发送“exit”作为file.py的输入并将输出分配给out):

out=`echo "exit" | python file.py`

取决于你想要达到的目标。

答案 1 :(得分:1)

保持python execution外部循环,因为它不依赖于任何循环变量:

#!/bin/bash

# initialize output file
> out.txt

# execute python script
out=$(echo "exit" | python file.py)

# loop
while read -r line; do
   [[ "$out" == *"WORD"* ]] && echo "$line" >> out.txt
done < "$1"

在我添加的许多方面,引用似乎也缺失了。

答案 2 :(得分:1)

管道在子shell中运行,因此其中的变量赋值在父shell中不可见。它应该是:

out=$(echo exit | python file.py)

现在整个管道都在命令替换中,但变量赋值在原始shell中。