我正在BASH写一个脚本。我在脚本中有一个函数,我想向用户提供进度反馈。唯一的问题是echo命令不会打印到终端。相反,所有的回声都连接在一起并在最后返回。
考虑以下简化代码,如何在用户终端中打印第一个echo并将第二个echo作为返回值?
function test_function {
echo "Echo value to terminal"
echo "return value"
}
return_val=$(test_function)
答案 0 :(得分:10)
将终端输出发送到stderr:
function test_function {
echo "Echo value to terminal" >&2
echo "return value"
}
答案 1 :(得分:10)
除了发送到STDERR之外的其他解决方案(如果您的STDERR有其他用途,或者可能被调用者重定向,则可能是首选)
此解决方案直接打印到终端tty:
function test_function {
echo "Echo value to terminal" > /dev/tty
echo "return value"
}
答案 2 :(得分:4)
不要使用命令替换来从函数
获取返回值返回值始终位于$?
变量。您可以使用变量而不是使用命令替换
<强>测试强>
$ function test_function {
> return_val=10;
> echo "Echo value to terminal $return_val";
> return $return_val;
> }
$ test_function
Echo value to terminal 10
$ return_value=$?
$ echo $return_value
10
答案 3 :(得分:0)
如果您不知道自己在哪个终端/设备中:
function print_to_terminal(){
echo "Value" >$(tty)
}