murungu
murungu

Reputation: 2240

capture output from a pipe and store it in a variable

I am trying to capture output from a pipe and store it in a variable. Using a subshell ie var=$(computeOutput) WILL NOT WORK because the computeOutput function itself is setting other variables that need to be stored in the same scope as the output. If I use a subshell the other variables will be set in the subshell's local copy but not in the parent shell.

One solution I thought of is the following:

Given the function...

function storeOutput() { var=$(cat) }

...when I do the following...

echo "hello" | storeOutput; echo $var

... "hello", the value of var, is printed on the console

However when I use this function from inside a script instead of getting the correct result I get a listing of the contents of the current directory. FYI I am using mac OSX with mac ports installed.

Can anyone explain why this is happening??? OR BETTER STILL SUGGEST ANOTHER SOLUTION

Upvotes: 1

Views: 1641

Answers (1)

murungu
murungu

Reputation: 2240

Problem solved: In the script I was piping multi-line output to the storeOutput function. When I printed the value of var I forgot to enclose it in double quotes, ie "$var" so assume it regarded part of the output as a command, such as ls

Other than that the function storeOutput() { var=$(cat) } seems to work

Upvotes: 1

Related Questions