Bash - 永远阻止回勾调用

Bash - back tick invocation blocks for ever

这很可能是我在某个地方犯的一个愚蠢的错误,但我似乎无法弄清楚发生了什么。希望我能在这里找到一些帮助。

我有一个脚本 callee.sh 需要一些可选变量 ,, 等等......它在脚本中做了一堆回显(所以,多行输出)我只想最后一行作为结果。其他行只是调试状态报告。

当尝试将结果分配给这样的变量时

result=`./callee.sh | tail -n 1` 完美运行

但是如果带参数

result=`./callee.sh param1 param2 param2 | tail -n 1` 代码将永远阻塞,永远不会进入 callee.sh

为了比较我试过了运行

result=`./callee.sh`,这可行,但所有行都附加到一行(没问题)

但是运行

result=`./callee.sh param1 param2 param2` 也永远挂起。从不输入 callee.sh

我做错了什么?我应该怎么做?

没有代码不知道,但简短的回答是使用

result=$(./callee.sh ...)

而不是反引号。 $(...) 正确处理嵌套括号。

此外,使用 / 而不是 \

并且,正如@Leon 指出的那样,使用 tail -1tail -n 1,而不是 tail -n -1

如果对 callee.sh 的调用因参数而挂起,请尝试使用参数在脚本外部执行它并检查它是否也挂在那里... 无论如何,保存输出(并在之后打印出来)的最佳方式:

result="$(./callee.sh param1 param2 param2)"
echo "${result}" <--- this should show the line breaks