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

McS*_*man 14 bash

我在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)

  • 我喜欢这个解决方案...但是 /dev/tty 在每台机器上都一样吗?有没有办法动态获取这个位置? (3认同)

Jas*_*sen 10

将终端输出发送到stderr:

function test_function {
    echo "Echo value to terminal" >&2
    echo "return value"
}
Run Code Online (Sandbox Code Playgroud)


nu1*_*73R 5

不要使用命令替换来获取函数的返回值

返回值始终在变量中可用$?。您可以使用变量而不是使用命令替换

测试

$ 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)