Como eu configuro uma variável de ambiente para o sudo no MacOS?

2

Instalei o ServiceMix na minha máquina e estou tentando iniciá-lo. O script de inicialização é chamado de start.sh. Quando eu fiz ./start.sh , ele me deu uma mensagem de permissão negada. Então eu usei sudo ./start.sh , que inicia o servidor bem.

No entanto, parece estar usando o Java 7, quando eu gostaria de usar o Java 6 (por várias razões). Analisei o script start.sh e descobri que ele usa a variável JAVA_HOME . Então eu configurei meu JAVA_HOME para o diretório do JDK 6.

No entanto, o ServiceMix ainda usa o Java 7.

Uma pesquisa no Google revelou que quando um comando é executado com o sudo, o sudo remove certas variáveis de ambiente. Então eu fiz sudo -E ./start.sh . Novamente, usou o JDK 7.

Eu abri o start.sh e adicionei uma linha, echo $JAVA_HOME para ver se a variável está definida corretamente ou não. A saída de echo era uma linha vazia.

Eu tentei modificar o arquivo / etc / sudoers para incluir Defaults env_keep += "JAVA_HOME" . A execução de start.sh agora me diz que minha instrução de eco é novamente uma linha vazia. O ServiceMix ainda usa o JDK 7.

Eu tentei definir JAVA_HOME em /etc/profile . A execução de start.sh agora me diz que minha instrução de eco é novamente uma linha vazia. Novamente, o ServiceMix usa o JDK 7.

Que erro estou fazendo aqui?

FWIW, estou no Mac OS X 10.8.2. echo $SHELL no meu terminal retorna / bin / bash. Quando eu uso sudo su e fogo echo $SHELL , ele retorna / bin / sh.

    
por Shivasubramanian A 10.03.2013 / 07:02

2 respostas

1

Sugiro-lhe que experimente os seguintes passos:

  1. Dentro do diretório /etc/profile.d , crie um arquivo chamado set_java_path.sh contendo a linha

    export JAVA_HOME=<_complete_path_to_java6_directory_>

  2. Execute o comando bash uma vez para fazer a alteração acima para carregar. E execute o script start.sh .

Editar:

Se o diretório /etc/profile.d não existir, crie os mesmos nomes de diretório (permissão: 0755 & proprietário e grupo como raiz) e, dentro do arquivo /etc/profile , adicione o seguinte código:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
    
por 10.03.2013 / 07:22
1

Para preservar suas variáveis de ambiente como sudoer, adicione Defaults env_keep += PATH ao seu arquivo sudoer ( sudo visudo ).

    
por 15.03.2013 / 01:50