在 PowerShell 中,我可以这样做:
function Get-Foo()
{
Write-Host "Calculating result..."
return 42
}
$x = Get-Foo
Write-Host "The answer is $x" # output: The answer is 42
所以
Calculating result..
输出到控制台,但它不存在于管道中,所以我可以只获取方法的“返回值”并且它可以工作但是在 bash 中我没有
Write-Host
像这样的事情是行不通的:function getfoo {
echo "Calculating result..."
echo "42"
}
x=$(getfoo)
echo $x # output will include "Calculating result..."
我意识到我可以保存到文件并在之后打印,只是想知道是否有更优雅的选择
最佳答案
将您的输出重定向到 /dev/tty
直接打印到终端:
echo "Calculating result..." > /dev/tty
简单的例子:
# Only '42' is stored in $output
$ output=$(echo "Calculating result..." > /dev/tty; echo 42)
Calculating result...
另一个,可能更好的选择 - 如果你想给调用者选择仍然捕获 - 或静音 - 状态信息 - 是 重定向到标准错误 , 与
>&2
:# Only '42' is stored in $output
$ output=$(echo "Calculating result..." >&2; echo 42)
Calculating result...
关于PowerShell 的 Write-Host 的 Bash 等效项(写入终端但不通过管道传输到标准输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61729227/