Você precisa garantir que essas duas linhas estejam presentes no arquivo sudoers.
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
Veja estes URLs para mais detalhes:
Eu fiz um diretório bin
na minha pasta pessoal onde coloco todos os meus scripts. Então no meu .bashrc eu adicionei o seguinte:
export PATH=$PATH:/home/myusername/bin
Para poder acessar os arquivos que coloquei lá de qualquer lugar. Mas alguns dos scripts precisam ser executados como root. Então eu pensei, eu poderia ligar simbolicamente o meu .bashrc como root, (como em /root/.bashrc aponta para /home/myusername/.bashrc, não sei se isso é inteligente) então quando eu preciso executar um script como root Eu apenas posso fazer:
sudo program_that_requires_root
Mas então eu recebo um:
sudo: program_that_requires_root: command not found
Se eu fizer login como root e executar o programa, ele funcionará bem. Então, qual é a maneira correta de realizar o que eu quero?
sudo
redefine a variável de ambiente PATH
para um padrão interno ou fornecido pelo administrador, na maioria das configurações. Então você não poderá digitar apenas sudo myscript
.
Você pode escrever uma função de wrapper:
sudo () {
local cmd
case $1 in
-*) :;; # there are options, change nothing
*/*) :;; # explicit path, change nothing
*) # a command name, look it up in our $PATH
cmd=$(type -p -- "$1")
if [[ -n $cmd ]]; then shift; set -- "$c" "$@"; fi;;
esac
command sudo "$@"
}
(Isso é para o bash; altere type -P
para type -p
no ksh ou zsh.)
Por padrão, o sudo redefine o ambiente. Você já tentou adicionar o caminho para .bashrc do root? Ou invoque sudo com -E (que só funciona se setenv em sudoers estiver configurado, ou o respectivo comando tiver o conjunto de tags SETENV).