In PowerShell I can do this:
function Get-Foo()
{
Write-Host "Calculating result..."
return 42
}
$x = Get-Foo
Write-Host "The answer is $x" # output: The answer is 42
So Calculating result..
is output to the console, but it's not present in the pipeline so I can just take the method's "return value" and it works
However in bash I don't have Write-Host
and something like this won't work:
function getfoo {
echo "Calculating result..."
echo "42"
}
x=$(getfoo)
echo $x # output will include "Calculating result..."
I realize I can save to a file and print after, just wondering if there's a more elegant alternative
Redirect your output to /dev/tty
to print directly to the terminal:
echo "Calculating result..." > /dev/tty
Simple example:
# Only '42' is stored in $output
$ output=$(echo "Calculating result..." > /dev/tty; echo 42)
Calculating result...
Another, probably better option - if you want to give the caller the option to still capture - or silence - the status information - is to redirect to stderr, with >&2
:
# Only '42' is stored in $output
$ output=$(echo "Calculating result..." >&2; echo 42)
Calculating result...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With