В моем каталоге /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
.