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 -1
或 tail -n 1
,而不是 tail -n -1
。
如果对 callee.sh 的调用因参数而挂起,请尝试使用参数在脚本外部执行它并检查它是否也挂在那里...
无论如何,保存输出(并在之后打印出来)的最佳方式:
result="$(./callee.sh param1 param2 param2)"
echo "${result}" <--- this should show the line breaks
这很可能是我在某个地方犯的一个愚蠢的错误,但我似乎无法弄清楚发生了什么。希望我能在这里找到一些帮助。
我有一个脚本 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 -1
或 tail -n 1
,而不是 tail -n -1
。
如果对 callee.sh 的调用因参数而挂起,请尝试使用参数在脚本外部执行它并检查它是否也挂在那里... 无论如何,保存输出(并在之后打印出来)的最佳方式:
result="$(./callee.sh param1 param2 param2)"
echo "${result}" <--- this should show the line breaks