Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash script store command output into variable

I have a problem concerning storing the output of a command inside a variable within a bash script.
I know in general there are two ways to do this

either

foo=$(bar) # or foo=`bar` 

but for the Java version query, this doesn't seem to work.

I did:

version=$(java --version) 

This doesn't store the value inside the var. It even still prints it, which really shouldn't be the case.

I also tried redirecting output to a file but this also fails.

like image 670
user1278282 Avatar asked Mar 19 '12 10:03

user1278282


People also ask

How do you store the output of a command to a variable?

Here are the different ways to store the output of a command in shell script. You can also use these commands on terminal to store command outputs in shell variables. variable_name=$(command) variable_name=$(command [option ...] arg1 arg2 ...) OR variable_name=`command` variable_name=`command [option ...]

How do you store output?

the shortcut is Ctrl + Shift + S ; it allows the output to be saved as a text file, or as HTML including colors!

Which command should I use to display a variable?

The echo command is useful to display the variable's output especially when you know the content of a variable will not cause any issue.


2 Answers

 version=$(java -version 2>&1) 

The version param only takes one dash, and if you redirect stderr, which is, where the message is written to, you'll get the desired result.

As a sidenote, using two dashes is an inofficial standard on Unix like systems, but since Java tries to be almost identical over different platforms, it violates the Unix/Linux-expectations and behaves the same in this regard as on windows, and as I suspect, on Mac OS.

like image 200
user unknown Avatar answered Sep 18 '22 02:09

user unknown


That is because java -version writes to stderr and not stdout. You should use:

version=$(java -version 2>&1) 

In order to redirect stderr to stdout.

You can see it by running the following 2 commands:

java -version > /dev/null  java -version 2> /dev/null 
like image 29
Eran Ben-Natan Avatar answered Sep 19 '22 02:09

Eran Ben-Natan