Script Bash retorna “comando não encontrado” quando fora da pasta de origem

0

no meu diretório, /home/lucas/bin , tenho 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 , ele corre bem com sudo term_multiscreen . Quando estou fora desse diretório, ele retorna command not found . Eu também tenho /home/lucas/bin no meu $PATH . O que estou fazendo errado?

BTW 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]~$ 

BTW estou no Ubuntu 13.10

    
por modulitos 07.05.2014 / 00:49

2 respostas

3

Sugiro chamar seu script com o caminho completo: sudo /home/lucas/bin/term_multiscreen ou sudo ~/bin/term_multiscreen . Isso não criará nenhum risco de segurança associado ao sudo ' secure_path '.

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

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

Em seguida, recarregue seu ~.bashrc para testar:

. ~/.bashrc
tmulti

Se você sempre chamar seu script com sudo , também poderá remover as chamadas sudo do script.

    
por 07.05.2014 / 09:26
1

Ubuntu?

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

Ou execute sudo visudo e altere Defaults secure_path para Defaults !secure_path . Então, sudo não usará a opção compilada, --with-secure-path .

    
por 07.05.2014 / 01:03