48

i have a shell script "script.sh" which gives output as "success" or "Failed" when i execute in unix window. Now i want to store the output of script.sh into a unix command variable. say $a = {output of script.sh}

1

5 Answers 5

98

Two simple examples to capture output the pwd command:

$ b=$(pwd)
$ echo $b
/home/user1

or

$ a=`pwd`
$ echo $a
/home/user1

The first way is preferred. Note that there can't be any spaces after the = for this to work.

Example using a short script:

#!/bin/bash

echo "hi there"

then:

$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there

In general a more flexible approach would be to return an exit value from the command and use it for further processing, though sometimes we just may want to capture the simple output from a command.

Sign up to request clarification or add additional context in comments.

3 Comments

yes it returns a string. I just want to store the value to $a
can a command be replaced by script.sh ? like : $a=script.sh will that store the out put of a script.sh ?
this doesn't work with program like readelf, I don't know why.
7

Suppose you want to store the result of an echo command

echo hello   
x=$(echo hello)  
echo "$x",world!  

output:

hello  
hello,world!

1 Comment

@NitsanBaleli This is a answer, not a question
4

You should probably re-write the script to return a value rather than output it. Instead of:

a=$( script.sh ) # Now a is a string, either "success" or "Failed"
case "$a" in
   success) echo script succeeded;;
   Failed) echo script failed;;
esac

you would be able to do:

if script.sh > /dev/null; then
    echo script succeeded
else
    echo script failed
fi

It is much simpler for other programs to work with you script if they do not have to parse the output. This is a simple change to make. Just exit 0 instead of printing success, and exit 1 instead of printing Failed. Of course, you can also print those values as well as exiting with a reasonable return value, so that wrapper scripts have flexibility in how they work with the script.

1 Comment

As a side note, you'll want to use success and failed (note the consistent capitalization) in any real code, or things will get confusing quickly.
3
export a=$(script.sh)

Hope this helps. Note there are no spaces between variable and =. To echo the output

echo $a

5 Comments

when the script will execute ? after submitting echo $a? or after export ?
Why are you exporting a? You should use double quotes around $a in the echo statement.
@login it will run the script in a subshell and wait for it until it quits, that subshell's streams will be pointing to the variable "a", meaning that everything they output will be written to the variable instead of the standard output of your main shell
@SvenMarnach I didn't know how the OP wanted to use the variable, exporting makes it available to child processes
@logan $(command) is a way to run commands and capture output
0

You need to start the script with a preceding dot, this will put the exported variables in the current environment.

#!/bin/bash
...
export output="SUCCESS"

Then execute it like so

chmod +x /tmp/test.sh
. /tmp/test.sh

When you need the entire output and not just a single value, just put the output in a variable like the other answers indicate

1 Comment

No reason for "export" when using source. Also, for only a single value, exit status or stdout seem that they would make more sense.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.