Ich habe diese Frage und Antwort gelesen , aber sie passt nicht zu meinem Problem, obwohl sie ähnlich ist.
Ich schreibe ein Skript (cpj), mit dem eines meiner aktuellen Projekte gestartet wird. Ich habe ungefähr 5 von ihnen. Wenn ich tippe
$ cpj blah
Ich möchte, dass das aktuelle Arbeitsverzeichnis in das bla-Projektverzeichnis (das ich in $ PROJDIR habe) geändert wird, und ich möchte, dass emacsclient die Hauptdatei für dieses Projekt öffnet (die ich in $ MAINFILE halte).
Die von mir zitierte Frage besagt, dass Sie die Umgebung der Shell, in der das Skript ausgeführt wird, nicht direkt ändern können, aber Sie können ein Skript als Quelle verwenden, und dies wird auch der Fall sein.
Um dies zu testen, habe ich ein Shell-Skript (chcwd) geschrieben, das eine Zeile enthält:
cd $1
Wenn ich über die Befehlszeile Folgendes tue:
$ . chcwd $PROJDIR
Mein aktuelles Arbeitsverzeichnis ändert sich nach Wunsch. Wenn ich andererseits aus meinem cpj-Skript dieselbe Zeile habe:
. chcwd $PROJECT
Das aktuelle Arbeitsverzeichnis der Shell wird nicht geändert. Mir ist klar, dass ich 2 Skripte (cpj und dann chcwd) ausführe und so 2 Shells erstelle, aber ich sehe keine Möglichkeit, das zu tun, was ich will. Kann mir jemand zeigen, wie ich mein Ziel erreichen kann?
quelle
Ich habe ein ähnliches Skript für meinen persönlichen Gebrauch geschrieben. Es gibt einen sehr einfachen Trick, um das Arbeitsverzeichnis innerhalb eines Skripts zu ändern. Schreiben Sie zuerst einfach Ihr Skript, in.ex.:
Nehmen wir nun an, das Skript heißt 'cdto'. Damit es funktioniert, müssen Sie es in der aktuellen Shell abrufen, was mit 'source' oder '' erreicht werden kann. Befehl (beide sind gleich). In Bsp.:
Nun, um es bequemer zu machen:
Kopieren Sie das 'cdto'-Skript in ein' bin'-Verzeichnis Ihres Kontos (z. B. / home / johnsmith / bin - erstellen Sie es, wenn es nicht vorhanden ist). Überprüfen Sie Ihre PATH-Variable, um sicherzustellen, dass das Verzeichnis 'bin' enthalten ist:
echo $ PATH
Wenn nicht, bearbeiten Sie Ihre Profildatei und fügen Sie Folgendes hinzu:
Fügen Sie Ihrer .bashrc- oder .bash_aliases-Datei einen Alias hinzu:
alias cdto = '. cdto '
Und es ist geschafft. Nach dem nächsten Login oder wenn Sie ein neues Terminal öffnen, können Sie einfach in.ex verwenden:
Genießen :-)
Sebastian Piech
quelle
Ein einfacher Trick, um dies zu tun:
Jetzt lautet das Arbeitsverzeichnis $ PROJECT.
quelle