我有以下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
都没有价值......
答案 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中。