Скрипт Bash возвращает «команда не найдена», когда находится за пределами исходной папки

Скрипт Bash возвращает «команда не найдена», когда находится за пределами исходной папки

В моем каталоге /home/lucas/binесть следующий скрипт 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]~$ 

Когда я cd ~/bin, он отлично работает с sudo term_multiscreen. Когда я нахожусь за пределами этого каталога, он возвращает command not found. У меня также есть /home/lucas/binв моем $PATH. Что я делаю не так?

Кстати, вот мои разрешения:

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

Кстати, у меня Ubuntu 13.10.

решение1

Я бы посоветовал вызывать ваш скрипт с полным путем: sudo /home/lucas/bin/term_multiscreenили sudo ~/bin/term_multiscreen. Это не создаст никаких рисков безопасности, связанных с sudo' s secure_path.

Конечно, это слишком долго печатать (администраторы ленивы), поэтому введите это в псевдоним в вашем ~/.bashrc:

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

Затем перезагрузите ваш ~.bashrcдля проверки:

. ~/.bashrc
tmulti

Если вы всегда вызываете свой скрипт с помощью sudo, вы также можете удалить sudoвызовы внутри скрипта.

решение2

Убунту?

Определите псевдоним вашего постоянного пользователя: alias sudo='sudo env PATH=$PATH'.

Или запустите sudo visudoи измените Defaults secure_pathна Defaults !secure_path. Тогда sudoне будет использоваться скомпилированная опция, --with-secure-path.

Связанный контент