* set, export, env setzen Umgebungsvariablen * set und env können diese auch anzeigen * set ist ein eingebautes Werkzeug der Shell und zeigt alle Shell-Variablen an * mehr als env, was nur die Umgebungsvariablen anzeigt ^Befehl ^Auswirkung auf ^ |set|Ändert nur unmittelbar Variablen für die aktuelle Shell. Die Änderungen werden in keine Subshells oder von der Shell gestarteten Programme übernommen. | |export|Setzt Variablen für die aktuelle Shell und alle Untershells und Programme die durch diese Shell gestartet werden| |env|Startet einen Prozess und setzt bestimmte Umgebungsvariablen. Die Umgebungsvariablen der Shell von der ggf. gestartet wirdt ändern sich dabei nicht| Beispiel: set eins=1 echo $eins * "echo $eins" gibt nichts zurück export mytest="hallo" echo $mytest hallo /bin/bash echo $mytest hallo * "echo $mytest" gibt den Wert zurück * "echo $mytest" in einer Subshell gibt ebenfalls den Wert zurück, da diese die Umgebungsvariablen erbt /usr/bin/env blafasel="hallo" /usr/bin/zsh -c 'echo $blafasel' hallo set | grep blafasel * der echo-Befehl in der Sub-Shell gibt den Inhalt der Variable "blafasel" aus * der Befehl set (in der Ursprungsshell) kennt die Variable nicht und gibt daher nur einen leeren String zurück ====== env ====== * ist ein eigenständiges Programm (nicht Teil einer Shell) * führt ein Programm, ggf. mit bestimmten (zusätzlichen) Umgebungsvariablen aus * kann auch genutzt werden um Befehle auszuführen die in $PATH enthalten sind, deren Ort man aber nicht kennt * das ist relevant wenn man [[linux:Shebang]]s nutzt * Achtung: Wenn man einen Befehl per env ausführt und dieser Shellvariablen benutzt sollte man diesen in einfache Anführungszeichen "'" setzen, weil ansonsten werden die Variablen bereits durch Ursprungsshell durch ihre Werte ersetzt Mit einfachen Anführungszeichen ("richtig"): blafasel="wiedersehen" /usr/bin/env blafasel="hallo" /usr/bin/zsh -c 'echo $blafasel' hallo Mit doppelten Anführungszeichen ("falsch"): blafasel="wiedersehen" /usr/bin/env blafasel="hallo" /usr/bin/zsh -c "echo $blafasel" wiedersehen * in letzterem Beispiel wird vor dem Aufruf von env die Variable "blafasel" bereits durch ihren Wert ersetzt durch die ursprüngliche Shell