Existem algumas perguntas no site que parecem relacionadas ao meu problema, mas não encontrei uma solução em nenhuma delas.
Meu sistema operacional é o Ubuntu 12.04. Eu mvn
instalei /tools/noarch/apache-maven-3.1.1
e adicionei as seguintes linhas no final do meu /etc/profile
:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Depois disso eu executo source /etc/profile
.
Agora o meu problema é: quando eu executar mvn --version
o comando tiver êxito e mvn
executável é encontrado, enquanto que, se eu executar: sudo mvn --version
eu recebo a saída: sudo: mvn: command not found
. Eu sei que PATH
pode ser diferente quando executo um comando com sudo
e é por isso que tentei isso:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Outra coisa que tentei é executar sudo su -
e digitar mvn --version
. Nesse caso, mvn
foi encontrado com sucesso e o comando foi bem-sucedido. O que está acontecendo aqui?
Respostas:
$PATH
é avaliado pelo seu shell, para que sua verificação não funcione conforme o esperado./etc/sudoers
está configurado para substituir o seuPATH
por um padrão.sudo
não carrega um ambiente de shell de login antes de executar o comando, portanto, o padrãoPATH
de/etc/sudoers
é usado.su -
abre um shell de login, que envolve o carregamento/etc/profile
. Consulte aman bash
seção INVOCAÇÃO .Basta remover a
PATH
redefinição/etc/sudoers
. É provável que uma regra seja chamadasecure_path
.CentOS
No CentOS você pode adicionar
PATH
àDefaults env_keep
seção:fonte
sudo: ./<some_binary>: command not found
. Estou usando o Arch Linux.Dê
sudo
sua atualPATH
com:fonte
-E
Além disso, eu usaria a opção para preservar o restante do ambiente. De fato, isso é tão útil que pode ser colocado em um script / alias / function para facilitar o uso. Vou adicionar isso como uma resposta separada - mas parabéns ao @opyate!env: cmd: No such file or directory
- Alguma idéia de por que isso seria?sudo: ./<some_binary>: command not found
. Estou usando o Arch Linux.Ao elaborar a resposta do @ opyate, estou usando o seguinte script de shell (que pode ser nomeado
mysudo
, por exemplo):-E
dizsudo
para preservar o meio ambiente.env "PATH=$PATH"
é expandido fora dasudo
chamada, disponibilizando o externo também paraPATH
o interiorsudo
(isso é necessário além do-E
quePATH
geralmente recebe tratamento especial, além do tratamento que todo o ambiente recebe)."$@"
passa os argumentos que nosso script recebe para asudo
linha.Salve o script em um arquivo em um diretório no diretório
PATH
, dê a ele+x
permissões e pronto.fonte
Como as respostas atuais são um pouco vagas, a configuração específica para
/etc/sudoers
mudar seu caminho ésecure_path
:Você pode modificá-lo com
sudo visudo
, ou melhor ainda, adicionar os diretórios necessários:fonte
Eu tive o mesmo problema quando instalei o Maven pela primeira vez . O problema foi resolvido depois que adicionei as duas linhas,
para quatro arquivos:
e para o usuário atual (
mehran
é o meu nome de usuário Ubuntu):fonte
Você deve modificar a variável PATH do root exatamente como fez por si mesmo, ou seja , adicionando essas duas linhas no perfil do sudo, que está localizado em /root/.bashrc, e a fonte.
fonte
sudo source /root/.bashrc
gets:sudo: source: command not found
e sem asudo
permissão, recebo negada (conforme o esperado). Eu acredito que iniciar um novo terminal deve, em teoria, fazer o mesmo que a fonte, mas depois de iniciar um novo terminal,sudo mvn --version
ainda não encontramos nada.