Ich möchte ein Skript ausführen, um einfach das aktuelle Arbeitsverzeichnis zu ändern:
#!/bin/bash
cd web/www/project
Aber nachdem ich es ausgeführt habe, bleibt die aktuelle pwd unverändert! Wie kann ich das machen?
bash
scripting
environment-variables
cd-command
Sony Santos
quelle
quelle
return
, um aus einem Skript zu entkommen, das auf diese Weise erstellt wurde, nichtexit
- sie ähneln Shell-Funktionen undexit
beenden die Shell, die das Skript erstellt hat.source ./script
das selbe.
undsource
sind gleich in bash. 2. Der./
Dateiname muss nicht vor dem Dateinamen stehen, wenn er sich im selben Verzeichnis befindet. Es ist in. script
Erstellen Sie für kleine Aufgaben wie diese einen Alias, anstatt ein Skript zu erstellen.
Sie sollten dies zu Ihrer
.bashrc
Datei hinzufügen , wenn Sie dies für jede interaktive Shell festlegen möchten.Jetzt können Sie dies als ausführen
$ cdproj
.quelle
eval `./script`
odereval $(./script)
auszuführen. Dies ist ein gängiger Ansatz für Befehle, die die Umgebung der aufrufenden Shell aktualisieren müssen.eval
Ansatz wählen.Verwenden Sie
exec bash
am EndeDiese Frage wird jedoch häufig gestellt, weil man nach der Ausführung eines Bash-Skripts aus einem anderen Verzeichnis an der Bash-Eingabeaufforderung in einem bestimmten Verzeichnis belassen werden möchte .
Wenn dies der Fall ist, führen Sie am Ende des Skripts einfach eine untergeordnete Bash-Instanz aus:
Dadurch wird eine neue Unterschale erstellt. Geben Sie ein
exit
, um zur ersten Shell zurückzukehren, in der das Skript ursprünglich gestartet wurde.quelle
exec
als letzte Möglichkeit eines Schurken gilt. :)exit
(oder Strg + D) sauber zu beenden , müssen Sie dies 11 bis 21 Mal tun. (2) Ein weiterer Nachteil der Verwendung eines ausführbaren Skripts besteht darin, dass Sie beim Festlegen von Shell-Optionen (z. B.dotglob
oderglobstar
) in Ihrer interaktiven Shell-Sitzung diese verlieren, da Sie eine neue Shell starten.Während es Antworten gibt, die genau die gewünschte Aktion ausführen, besteht eine Standardmethode für diesen Zweck darin, eine symbolische Verknüpfung zu erstellen:
Dann könnten Sie
cd
das Verzeichnis mit dem Namenproj
:Diese Methode ist flexibler, da Sie unter Verwendung des Kurznamens auf Dateien zugreifen können, ohne
cd
:quelle
Wenn Sie zwischen weit entfernten Verzeichnissen im Dateisystem wechseln. Ich werde Autojump empfehlen .
quelle
Je nachdem, was Sie tun möchten, kann eine andere Lösung darin bestehen, eine Funktion anstelle eines Skripts zu erstellen.
Beispiel:
Erstellen Sie eine Funktion in einer Datei, sagen wir
/home/aidin/my-cd-script
:Fügen Sie es dann in Ihre
bashrc
oderzshrc
Datei ein:Jetzt können Sie es wie einen Befehl verwenden:
quelle
Warum nicht "exec" verwenden, um genau das zu tun, was ich mir wünsche?
quelle
exit
(oder Strg + D) sauber zu beenden , müssen Sie dies 11 bis 21 Mal tun.dotglob
oderglobstar
) diese verlieren, da Sie eine neue Shell starten. … (Fortsetzung)Sie können dies mit einer Funktion oder mit && tun. In den folgenden Beispielen wird Zabbix installiert und eine Datei mit einer Zeile darin erstellt.
Ex:
oder:
quelle