web-dev-qa-db-ja.com

Bashスクリプトはコマンド出力を変数に保存します

コマンドの出力をbashスクリプト内の変数に格納することに関して問題があります。
一般に、これを行うには2つの方法があることを知っています

どちらか

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

ただし、Javaバージョンクエリの場合、これは機能しないようです。

やった:

version=$(Java --version)

これは、変数内に値を保存しません。まだ印刷されていますが、実際にはそうではありません。

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

57
user1278282
 version=$(Java -version 2>&1)

バージョンパラメータはダッシュを1つだけ使用します。メッセージが書き込まれるstderrをリダイレクトすると、目的の結果が得られます。

補足として、2つのダッシュの使用はシステムのようなUnixでの非公式の標準ですが、Javaは異なるプラットフォーム上でほぼ同一になろうとするため、Unix/Linuxの期待に違反し、同じように動作しますこれは、Windows上、および私が疑うように、Mac OS上と見なされます。

67
user unknown

Java -versionstderrではなくstdoutに書き込みます。以下を使用する必要があります。

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

stderrstdoutにリダイレクトするには。

次の2つのコマンドを実行して確認できます。

Java -version > /dev/null

Java -version 2> /dev/null
15
Eran Ben-Natan