这很可能是我在某个地方犯的一个愚蠢的错误,但我似乎无法弄清楚发生了什么。希望我能在这里找到一些帮助。
我有一个脚本callee.sh
,它需要一些可选变量$1,$2,$3
等...并且它在脚本中做了一堆回显(因此,多行输出)我只想最后一行作为结果。其他行只是调试状态报告。
当尝试将结果分配给这样的变量时
结果=`./callee.sh | tail -n 1`
完美运行
但是,如果它需要参数
结果=`./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 -1
或 tail -n 1
,而不是 tail -n -1
。
关于linux - Bash - 反引号调用永远阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443957/