In meinem Verzeichnis /home/lucas/bin
habe ich das folgende Skript 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]~$
Wenn ich cd ~/bin
, läuft es problemlos mit sudo term_multiscreen
. Wenn ich mich außerhalb dieses Verzeichnisses befinde, gibt es zurück command not found
. Ich habe auch /home/lucas/bin
in meinem $PATH
. Was mache ich falsch?
Übrigens, hier sind meine Berechtigungen:
[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]~$
Übrigens verwende ich Ubuntu 13.10
Antwort1
Ich würde vorschlagen, Ihr Skript mit seinem vollständigen Pfad aufzurufen: sudo /home/lucas/bin/term_multiscreen
oder sudo ~/bin/term_multiscreen
. Dadurch entstehen keine Sicherheitsrisiken im Zusammenhang sudo
mit secure_path
.
Das ist natürlich zu lang zum Eintippen (Administratoren sind faul), also fügen Sie es in einen Alias in Ihrem ein ~/.bashrc
:
alias tmulti="sudo $HOME/bin/term_multiscreen"
Laden Sie dann ~.bashrc
zum Testen Ihre neu:
. ~/.bashrc
tmulti
Wenn Sie Ihr Skript immer mit aufrufen , könnten Sie die Aufrufe innerhalb des Skripts sudo
auch entfernen .sudo
Antwort2
Ubuntu?
Definieren Sie einen Alias als Ihren regulären Benutzer: alias sudo='sudo env PATH=$PATH'
.
Oder führen Sie es aus sudo visudo
und ändern Sie Defaults secure_path
es in Defaults !secure_path
. Dann sudo
wird die kompilierte Option nicht verwendet --with-secure-path
.