次の行を含むスクリプトが見つかりました。
java_version=$($JAVA_HOME/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d '_' -f 1,3)
以下はテストです。
if [[ -n "$java_version" ]]; then
...
コマンドラインから呼び出すとテストが成功します。 Javaアプリケーションから呼び出すと失敗します。
いくつかの便利な注意:
- スクリプトの最初の行はです
#!/usr/bin/env bash
。 - テストの成功は、コマンドラインから呼び出すときに
java_version
nullではないことを意味します。さらに確認するために、echo
テストする前にいくつかの外部ファイルに値を書き、java_version
そこから値を見つけます。 - 二重括弧を単数に変更し、テストはコマンドラインとJavaアプリケーションでスクリプトを正常に呼び出しました。
- 私はGNU / Linux Ubuntu 18.04、bashバージョン4.4.20、Java 8(Oracle JDK)を実行しています。
この動作の変化の原因が何であるかについてのアイデアはありますか?
答え1
実行中のシェルを見つけるためにスクリプトに次の行を追加しました。
ps -p $$ > /path/to/some_file
/bin/sh
実行中のシェルが二重角かっこ構文をサポートしていないことがわかりました。二重括弧はいくつかのシェル(源泉)。
すべてのクレジットは私の投稿にコメントした人に戻ります。