PowerShell 的 Write-Host 的 Bash 等效项(写入终端但不通过管道传输到标准输出)

标签 bash powershell pipeline

在 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/

相关文章:

sql-server - 如何grep SQL Server存储过程?

security - PowerShell 安全日志

.net - 如何从 PowerShell 中根据 'haveibeenpwned Pwned Passwords' 检查密码?

f# - -> Clojure 中的运算符

python - sklearn - 如何检索 PCA 组件并解释传递给 GridSearchCV 的管道内部的方差

Linux shell : LOOP for create file in each folder

arrays - 将使用 jq 解析的数组分配给 Bash 脚本数组

json - Bash循环为mongoimport批量合并文件

python - 使用 spark ml(数据框)进行逻辑回归

javascript - 拆分标准输出并将每个部分通过管道传输到命令