Por que o sudo su -l -c "java" não funciona mesmo que sudo -l ecc $ PATH mostre a localização do binário java? [duplicado]

0

Eu tenho um servidor com binários Java de um tarball em um local personalizado e o seguinte em /etc/bash.bashrc :

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

Quando executo sudo su -l -c "java" , obtenho -su: java: command not found . No entanto, quando eu sudo su -l in diretamente, posso executar java sem erros.

Além disso, sudo su -l -c "echo $PATH inclui a localização de java .

Por que o sudo su -l -c "java" não é executado?

EDIT: Embora seja /etc/bash.bashrc e não ~/.bashrc , o mesmo raciocínio se aplica na pergunta / resposta vinculada.

    
por neverendingqs 19.03.2015 / 22:16

2 respostas

1

dhag explicou por que $PATH parece estar correto, mesmo que não seja.

A razão pela qual o caminho não foi alterado é mais provável que su não execute o shell interativamente, o que significa que o bash.bashrc não é executado em primeiro lugar, ou que ele sai antes de fazer qualquer coisa porque detecta que não está sendo executado de forma interativa.

Você terá que especificar o caminho completo em vez do nome do comando ou descobrir onde o caminho padrão está definido e alterá-lo.

    
por 19.03.2015 / 22:29
2

Quando você executa sudo su -l -c "echo $PATH" , $PATH é expandido em seu shell original, porque as aspas duplas não impedem essa expansão. Você deseja que sudo su -l -c 'echo $PATH' expanda no su shell.

Suponho que uma pergunta de acompanhamento será "então como obtenho o java para executar"? Eu sugeriria chamar java com seu caminho completo, ou, e isso pode ou não funcionar, manualmente tentando carregar o arquivo rc adequado, algo como su -c '. /etc/bash.bashrc; java ...' .

    
por 19.03.2015 / 22:24