I am trying to get bash to process data from stdin that gets piped into, but no luck. What I mean is none of the following work:
echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=
echo "hello world" | read test; echo test=$test
test=
echo "hello world" | test=`cat`; echo test=$test
test=
where I want the output to be test=hello world. I’ve tried putting “” quotes around "$test" that doesn’t work either.
Use
You can trick
readinto accepting from a pipe like this:or even write a function like this:
But there’s no point – your variable assignments may not last! A pipeline may spawn a subshell, where the environment is inherited by value, not by reference. This is why
readdoesn’t bother with input from a pipe – it’s undefined.FYI, http://www.etalabs.net/sh_tricks.html is a nifty collection of the cruft necessary to fight the oddities and incompatibilities of bourne shells, sh.