我在BASH写剧本.我在脚本中有一个函数,我想向用户提供进度反馈.唯一的问题是echo命令不会打印到终端.相反,所有的回声都连接在一起并在最后返回.
考虑以下简化代码,如何在用户终端中打印第一个echo并将第二个echo作为返回值?
function test_function {
echo "Echo value to terminal"
echo "return value"
}
return_val=$(test_function)
Run Code Online (Sandbox Code Playgroud)
Rob*_*Hsu 12
除了发送到STDERR之外的解决方案(如果您的STDERR有其他用途,或者可能被调用者重定向,则可能是首选)
此解决方案直接打印到终端tty:
function test_function {
echo "Echo value to terminal" > /dev/tty
echo "return value"
}
Run Code Online (Sandbox Code Playgroud)
Jas*_*sen 10
将终端输出发送到stderr:
function test_function {
echo "Echo value to terminal" >&2
echo "return value"
}
Run Code Online (Sandbox Code Playgroud)
不要使用命令替换来获取函数的返回值
返回值始终在变量中可用$?。您可以使用变量而不是使用命令替换
测试
$ 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
Run Code Online (Sandbox Code Playgroud)