2012-03-19 10 views
46

bashスクリプト内の変数にコマンドの出力を格納する際に問題があります。
私は、一般的に、この変数へのBashスクリプトストアコマンドの出力

いずれか

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

を行うにはなく、Javaバージョンのクエリのために、これが動作するようには思えない2つの方法があります知っています。

は私がやった:

version=$(java --version) 

これは、VAR内の値を格納しません。それはまだそれを印刷します、本当にそうであってはいけません。

出力をファイルにリダイレクトしようとしましたが、これも失敗します。

+0

以上の2つの方法があります。 foo <を読んでください(これはもう一つの方法です)。これはエラー出力の捕捉に関するあなたの問題とは無関係です。 –

答えて

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

バージョンparamが一つだけダッシュを取り、あなたがメッセージが書き込まれている標準エラー出力を、リダイレクトする場合は、望ましい結果を得るでしょう。

サイドノートとして、2つのダッシュを使用することはUnix系システムの非公式標準ですが、Javaは異なるプラットフォームでほぼ同じにしようとするため、Unix/Linuxの期待に反し、Windowsと同様に動作します私が疑うように、Mac OS上で。

+0

おかげで正確に私が探していたもの – user1278282

+0

出力がstderrまたはstdoutに書き込まれているかどうかをどのように知っていますか? – user1527227

+2

@ user1527227:テストすることができます。 –

14

java -versionstderrに書き込み、stdoutに書き込まれていないためです。あなたは使用する必要があります。

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

stdoutstderrをリダイレクトするために。

次の2つのコマンドを実行して、それを見ることができます。

java -version > /dev/null 

java -version 2> /dev/null 
+0

あなたの洞察をいただきありがとうございます、それはトップもバージョンを印刷しますstderr – user1278282

関連する問題