sudo -E não é possível extrair alguns comandos localizados no diretório home?

2

sintoma:

$ sudo -E adb
sudo: adb: command not found

$ which adb
/home/usr/opt/android/platform-tools/adb

$ sudo -E echo ${PATH}
...:/home/usr/opt/android/platform-tools

$ stat ~/opt/android/platform-tools/adb
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/ usr)   Gid: ( 1000/ usr)

@richard, obrigado. Eu fiz isso:

$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ echo 'echo $PATH' | sudo -E sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

por isso não está no caminho do sudo. Mas como posso fazer o sudo respeitar o PATH temporariamente?

    
por Wang 06.09.2014 / 23:11

2 respostas

3

Não, não é! ( /home/usr/opt/android/platform-tools não está no PATH dentro do ambiente sudo .) ${PATH} é avaliado pelo seu shell antes do sudo ser executado, substituindo assim o valor de PATH antes de iniciar o sudo , não o valor dentro de sudo .

Você está correto ao suspeitar de PATH . No entanto, você teste dá uma resposta falsa por causa da ordem de avaliação.

Você precisa fazer sudo -E /home/usr/opt/android/platform-tools/adb

    
por 06.09.2014 / 23:14
1

Como você encontrou, sudo redefine $PATH . Você pode especificar o caminho completo para o utilitário que deseja executar e, na maioria dos casos, isso funciona bem. Mas pode haver situações em que você precisa preservar $PATH , como se o programa precisar chamar outros programas não encontrados no $PATH que sudo fornece.

A maneira mais simples de fazer isso é:

sudo env PATH="$PATH" mycmd

Isso tira proveito da ordem de avaliação do shell. $PATH é expandido antes que sudo seja executado, então, na verdade, ele se torna:

sudo env PATH="/usr/local/sbin:/usr/local/bin:..." mycmd

sudo simplesmente chama env , que define $PATH conforme instruído e, em seguida, chama mycmd .

Observe que isso só funciona se o acesso sudo não estiver restrito e você puder executar qualquer comando (ou qualquer comando env ).

    
por 07.09.2014 / 08:46

Tags