次のように、カスタムロケーションの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 ...'
。