回波输出到BASH功能内的端子

时间:2015-01-05 09:32:47

标签: bash

我正在BASH写一个脚本。我在脚本中有一个函数,我想向用户提供进度反馈。唯一的问题是echo命令不会打印到终端。相反,所有的回声都连接在一起并在最后返回。

考虑以下简化代码,如何在用户终端中打印第一个echo并将第二个echo作为返回值?

function test_function {
    echo "Echo value to terminal"
    echo "return value"
}

return_val=$(test_function)

4 个答案:

答案 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)
}