Primeiro, um item de nota sobre $PATH
. Você tem o JAVA_HOME
definido no diretório jdk
, mas para o PATH
, é necessário fazer isso $JAVA_HOME/bin
.
Em segundo lugar, se você precisar que essas variáveis estejam disponíveis para scripts não interativos, convém colocá-las em ~/.bashrc
, pois ~/.bash_profile
é lido apenas por logins interativos.
Na verdade, a ordem real na qual os perfis (shell de login) são lidos é:
-
/etc/profile
então:
-
~/.bash_profile
(no CentOS, se-f ~/.bashrc
, origens~/.bashrc
) -
~/.bash_login
-
~/.profile
(no Ubuntu, se-n $BASH_VERSION
, origens~/.bashrc
)
EDIT: Se um desses arquivos for encontrado, outros arquivos não serão processados, a menos que sejam explicitamente fornecidos
Non-login shells (por padrão) só procuram por ~/.bashrc
.
Então, dependendo de como você está executando bash
, você pode nem estar lendo o perfil ao qual adicionou essas linhas. Você está executando sudo -u grid bash
, ou su grid
ou su - grid
, ou iniciando uma nova sessão ssh cada vez que você testa? Algumas dessas opções podem não acionar um shell bash de login interativo.
Portanto, verifique cada um dos arquivos listados acima e veja se algum deles está desativado ou redefinindo a variável JAVA_HOME
. Em seguida, tente adicionar as linhas ao final de ~/.profile
, que é o último arquivo originado por um shell de login.
Para fins de depuração, você pode adicionar mensagens ao perfil para garantir que ele também esteja sendo definido corretamente.
~/.profile
:
export JAVA_HOME=/home/grid/jdk
echo "DEBUG: .profile: JAVA_HOME is [$JAVA_HOME]"
export HADOOP_HOME=/home/grid/hadoop
echo "DEBUG: .profile: HADOOP_HOME is [$HADOOP_HOME]"
PATH=$HADOOP_HOME:$JAVA_HOME/bin:$PATH
echo "DEBUG: .profile: PATH is [$PATH]"
export PATH
Isso causará 3 linhas de saída quando você fizer login em um shell de login interativo, e os valores entre os colchetes facilitarão a visualização se os valores estão sendo definidos para começar. Se você vir que JAVA_HOME
está sendo definido quando ~/.profile
é originado, mas não é definido quando o shell se torna interativo, você sabe que precisa continuar seguindo o processo de login para determinar onde o valor está mudando.