
echo $PATH im Gnome-Terminal:
/home/pc/less.js/bin:/home/pc/local/bin:/home/pc/local/bin:/home/pc/.rvm/gems/ruby-1.9.2-head/bin:/home/pc/.rvm/gems/ruby-1.9.2-head@global/bin:/home/pc/.rvm/rubies/ruby-1.9.2-head/bin:/home/pc/.rvm/bin:/usr/local/bin:/home/pc/local/bin:/usr/lib64/mp i/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin:/home/pc/Programmierung/Software/tup:/home/pc/Programmierung/Bibliotheken/depottools:/home/pc/Programmierung/Bibliotheken/apache-maven-3.0.4/bin
Aus diesem Skript:
#!/bin/zsh
echo $PATH
while inotifywait -e modify /home/pc/vbox-shared/less; do
lessc custom.less > /home/pc/vbox-shared/less/custom.css
done
/usr/lib64/mpi/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin
Wie Sie sehen, habe ich meine .zshrc
Datei wie folgt geändert:
export PATH=/home/pc/less.js/bin:$PATH
Warum funktioniert es im Skript nicht, wenn es als Datei ausgeführt wird? Das Problem liegt darin, dass der Befehl lessc nicht gefunden wird.
Antwort1
Das Skript wird mit ausgeführt /bin/zsh
, das keine interaktive oder Login-Shell ist und diese Datei nicht lädt. Von man zsh
, Hervorhebung von mir:
Befehle werden zuerst aus /etc/zshenv gelesen; dies kann nicht überschrieben werden. Das nachfolgende Verhalten wird durch die Optionen RCS und GLOBAL_RCS geändert; die erste betrifft alle Startdateien, während die zweite nur globale Startdateien betrifft (die hier mit einem Pfad angezeigt werden, der mit / beginnt). Wenn eine der Optionen zu irgendeinem Zeitpunkt nicht gesetzt ist, werden nachfolgende Startdateien des entsprechenden Typs nicht gelesen. Es ist auch möglich, dass eine Datei in $ZDOTDIR GLOBAL_RCS wieder aktiviert. Sowohl RCS als auch GLOBAL_RCS sind standardmäßig gesetzt.
Befehle werden dann aus $ZDOTDIR/.zshenv gelesen. Wenn es sich bei der Shell um eine Login-Shell handelt, werden Befehle aus /etc/zprofile und dann aus $ZDOTDIR/.zprofile gelesen. Wenn die Shell interaktiv ist, werden Befehle aus /etc/zshrc und dann aus $ZDOTDIR/.zshrc gelesen.. Wenn es sich bei der Shell um eine Login-Shell handelt, werden abschließend /etc/zlogin und $ZDOTDIR/.zlogin gelesen.
Das Skript erbt die Umgebung, von der es aufgerufen wird, und wenn dies keine andere (interaktive) Shell ist, enthält es nicht die von Ihnen festgelegten Einstellungen .zshrc
.
Sie können festlegen, PATH
wo es global gilt (z. B. /etc/zshenv
), es explizit direkt im Skript festlegen oder den Shebang-Skript-Header so ändern, dass es /bin/zsh -i
stattdessen ausgeführt wird, wodurch es geladen wird .zshrc
(Zitat man zsh
:Erzwingt interaktive Shell-Arbeit. Es ist weiterhin möglich, ein auszuführendes Skript anzugeben.).
Alternativ können Sie einfach den vollständigen Pfad zu dem Programm angeben, das nicht auf der Standardeinstellung steht PATH
, z. B. /home/pc/less.js/bin/lessc
.
Antwort2
zsh-Startdateien (auch bekannt als rc-Dateien)
Einem darunter liegenden Dateinamen, der kein vollständiger Pfad ist, wird implizit „$ZDOTDIR/“ vorangestellt. Dabei handelt es sich normalerweise um Ihr Home-Verzeichnis.
Die Reihenfolge, in der zsh Startskriptdateien bezieht, ist wie folgt.
/etc/zshenv– Zunächst werden die Befehle von hier ausgelesen, Optionen können dies nicht überschreiben.
.zshenv
/etc/zprofile– Login-Shell
.zprofile– Login-Shell
/etc/zshrc– interaktive Shell
.zshrc– interaktive Shell
/etc/zlogin– Login-Shell
.zlogin– Login-Shell
Zwei zsh-Optionen beeinflussen, ob zsh bestimmte der oben genannten Dateien als Quelle verwendet. („RCS“ ist der Plural von „rc“ und wird in Großbuchstaben wiedergegeben.)
Die zsh-Optionen RCS und GLOBAL_RCS sind standardmäßig festgelegt.
- RCS – betrifft alle Startdateien
- GLOBAL_RCS – betrifft nur globale Startdateien (Pfadnamen beginnend mit „/“)
Wenn eine Startdatei eine dieser Optionen aufhebt, überspringt zsh nachfolgende Startdateien dieses Typs.
Wenn eine Startdatei die Option GLOBAL_RCS festlegt, bezieht zsh nachfolgende globale Startdateien.