O script Bash retorna “comando não encontrado” quando está fora da pasta de origem

O script Bash retorna “comando não encontrado” quando está fora da pasta de origem

no meu diretório, /home/lucas/bintenho o seguinte script term_multiscreen:

[lucas@lucas-ThinkPad-W520]~$ sudo cat bin/term_multiscreen                              
#!/bin/bash
# Initializes Nvidia Optimus for multi-screen functionality.

xorg_process=$(ps aux | grep 'Xorg' | grep -v grep | awk '{print $2}')
sudo kill -15 $xorg_process
sudo rmmod nvidia
sudo tee /proc/acpi/bbswitch <<<OFF
# xrandr --output VIRTUAL1 --off
[lucas@lucas-ThinkPad-W520]~$ 

Quando eu cd ~/bin, funciona bem com sudo term_multiscreen. Quando estou fora desse diretório, ele retorna command not found. Também tenho /home/lucas/binno meu $PATH. O que estou fazendo de errado?

Aliás, aqui estão minhas permissões:

[lucas@lucas-ThinkPad-W520]~$ ls -la bin/
total 44
drwxr-xr-x  2 lucas lucas 4096 May  6 15:43 .
drwxr-xr-x 71 lucas lucas 4096 May  6 15:43 ..
-rwx--x--x  1 root  root   137 Mar  2 03:26 init_multiscreen
-rw-r--r--  1 lucas lucas    0 Mar  2 03:24 init_optimus~
-rwx--x--x  1 root  root   260 Mar  2 05:54 term_multiscreen
[lucas@lucas-ThinkPad-W520]~$ 

A propósito, estou no Ubuntu 13.10

Responder1

Eu sugeriria chamar seu script com o caminho completo: sudo /home/lucas/bin/term_multiscreenou sudo ~/bin/term_multiscreen. Isso não criará nenhum risco de segurança relacionado sudoao secure_path.

É claro que é muito longo para digitar (os administradores são preguiçosos), então coloque-o em um alias no seu ~/.bashrc:

alias tmulti="sudo $HOME/bin/term_multiscreen"

Em seguida, recarregue o seu ~.bashrcpara testar:

. ~/.bashrc
tmulti

Se você sempre chama seu script com sudo, também pode remover as sudochamadas dentro do script.

Responder2

Ubuntu?

Defina um alias como seu usuário regular: alias sudo='sudo env PATH=$PATH'.

Ou execute sudo visudoe mude Defaults secure_pathpara Defaults !secure_path. Então, sudonão usaremos a opção compilada, --with-secure-path.

informação relacionada