返回后意外这是我的last question上堆栈溢出的后续问题。 我会削减脚本的基本部分,但如果s.o.认为,知道脚本做什么可能会有所帮助,您可以查看其他问题。bash脚本退出从功能
#!/usr/bin/env bash
set -eu -o pipefail
declare -a framelist
#Print all results
function output_values() {
echo "Results!";
}
#parsing information from stdin
function parser() {
while read tc;
do
if [ -z "$tc" ]; then
continue
fi
#Evaluation and saving result to array
echo $result_value;
framelist+=($result_value);
if ((<<some abort condition>>)); then
exec 0>&-
echo "Last result: $result_value";
return 0
fi
done
}
some_command_writing_to_stdout | parser $2;
output_values;
脚本执行命令和管道输出到我的本地函数,最后在该行echo "Last result: $result_value";
,因为它是打算做返回的结果。在此之后,它将终止提供在该功能中解析的数据的命令 - 这也适用。
当达到return 0
时,我想应该执行脚本的下一行(在命令的右下方)output_values;
,但它不是。
即使我称之为output_values功能直接回声线前,打印的结果解析器功能,它不被执行。
它会变得更加怪异,因为我可以注释掉exec 0>&-
和所有行为一样。即使应该由该行终止的命令也会在解析器函数退出时立即终止。
我有什么改变能够与我的解析器函数的结果上下工夫,它返回后?这不能是有意的行为。
问候
曼努埃尔
后的样本代码很简单,工作并产生准确的故障 – Anubis
你尝试'设置-x'? –
'set -x'只显示'return 0'后面的退出,之后没有执行任何操作。 –