这是我对stackoverflow上上一个问题的跟进。我将脚本缩减至必要部分,但如果有人认为了解脚本功能可能会有帮助,可以查看其他问题。
该脚本执行命令并将输出传输到我的本地函数,最终在
当达到
即使在解析器函数中的打印结果的echo行之前直接调用output_values函数,它也不会被执行。
更奇怪的是,我可以注释掉
我需要改变什么才能在解析器函数返回后继续处理其结果?这不可能是预期的行为。
问候
Manuel
#!/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;
应该被执行,但实际上没有被执行。即使在解析器函数中的打印结果的echo行之前直接调用output_values函数,它也不会被执行。
更奇怪的是,我可以注释掉
exec 0>&-
,所有的行为都和原来一样。即使应该由此行终止的命令在解析器函数退出时也会被终止。我需要改变什么才能在解析器函数返回后继续处理其结果?这不可能是预期的行为。
问候
Manuel
set -x
吗? - Nitinkumar Ambekarset -x
只是显示在return 0
后退出,之后不执行任何操作。 - M. Uster