`sudo su -l -c "echo $PATH"`にJavaバイナリの場所が表示されますが、 `sudo su -l -c "java"`が機能しないのはなぜですか? [コピー]

`sudo su -l -c

次のように、カスタムロケーションのtarballにJavaバイナリを含むサーバーがあります/etc/bash.bashrc

export JAVA_HOME=/path/to/java/home
export PATH=$JAVA_HOME/bin:$PATH

実行するsudo su -l -c "java"-su: java: command not found。ところがsudo su -l直接入るとエラーなく実行になりますjava

さらに、sudo su -l -c "echo $PATH場所も含まれていますjava

sudo su -l -c "java"実行が失敗したのはなぜですか?

編集:そう/etc/bash.bashrcでない場合でも、~/.bashrcリンクされた質問/回答に同じ推論が適用されます。

ベストアンサー1

を実行すると、sudo su -l -c "echo $PATH"二重$PATH引用符によって拡張が防止されないため、元のシェルで拡張が発生します。シェルsudo su -l -c 'echo $PATH'で拡張を実行しようとしていますsu

その後の質問は「javaこれをどのように実行しますか?」になると仮定します。フルパスを使用してjavaを呼び出すか、正しいrcファイル(例えばsu -c '. /etc/bash.bashrc; java ...'

おすすめ記事