使用eval运行的bash脚本在完成之前不显示输出

时间:2013-12-03 00:16:50

标签: bash eval

script.sh:

cmd=( python script.py "'$param1'" "'$param2'" )
echo "before python script"
eval "${cmd[@]}"
echo "after python script"

script.py:

print "entering python script"
...
prompt the user

我的问题是script.py在完成之前没有显示输出。这是一个问题的原因是因为script.py包含一个提示,供用户选择,所以我需要立即显示输出。每次我运行它虽然它显示“在脚本之前”,没有提示显示,我盲目地输入我的输入,并且只有当它完成时才会出现提示并且其余的python脚本输出出现。

1 个答案:

答案 0 :(得分:0)

bash命令:

cmd=( python script.py "'$param1'" "'$param2'" )

表示:

  

运行python script.py$param1$param2的值作为参数传递,每个值都用单引号括起来,并捕获输出(stdout)。命令完成后,将捕获的输出拆分为单词并将它们放入shell数组变量cmd中,每个元素一个单词。

通常,如果您需要使用提示,则可以将其写入stderr,以防重定向或捕获stdout,如在命令行中一样。否则,提示将被视为任何其他输出,您将永远不会看到它。