Bash-Skript gibt „Befehl nicht gefunden“ zurück, wenn es sich außerhalb des Quellordners befindet

Bash-Skript gibt „Befehl nicht gefunden“ zurück, wenn es sich außerhalb des Quellordners befindet

In meinem Verzeichnis /home/lucas/binhabe 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/binin 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_multiscreenoder sudo ~/bin/term_multiscreen. Dadurch entstehen keine Sicherheitsrisiken im Zusammenhang sudomit 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 ~.bashrczum Testen Ihre neu:

. ~/.bashrc
tmulti

Wenn Sie Ihr Skript immer mit aufrufen , könnten Sie die Aufrufe innerhalb des Skripts sudoauch 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 visudound ändern Sie Defaults secure_pathes in Defaults !secure_path. Dann sudowird die kompilierte Option nicht verwendet --with-secure-path.

verwandte Informationen