Wie führe ich ein Skript in derselben Sitzung ohne exec aus?

920
user1517650

Ich habe unten ein Skript, um mich in meinem Projekt zu setzen: -

#! /bin/zsh  source ~/.zshrc crld #alias for Project base cd Kenneth_Love/survivalguide workon kenneth_tutorial 

Dieses Skript funktioniert, wird aber nicht in virtualenv abgelegt (Alias ​​ist richtig gesetzt)

Wie der Name schon sagt, erzeugt Virtualenv die Erstellung von virtualenv, die dazu dient, die Umgebung separat zu verwalten, so dass sie sich nicht gegenseitig stören, z. B. an einem Ort, an dem Sie die x-Version eines Pakets wünschen, und bei einem anderen Projekt, das Sie möchten, Y. Das Ausführen der obigen Skriptbefehle ist eine sich wiederholende Aufgabe. Dieses Skript wird jedoch in einer anderen Sitzung ausgeführt und dann beendet. Ich möchte, dass es auf derselben Shell-Umgebung läuft, in der ich dieses Skript aufrufe.

0
`virtualenv` scheint in dieser Community kein häufig diskutiertes Thema zu sein. Kannst du bitte kurz erklären, was es ist, und genauer beschreiben, was das Skript macht und was nicht (was soll es tun?), Und von welchem ​​Alias ​​sprichst du? Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. G-Man vor 8 Jahren 0

1 Antwort auf die Frage

1
Scott

Einige Shellbefehle (z. B. cd) betreffen die aktuelle Shell und ihre untergeordneten / absteigenden Prozesse, können sich jedoch nicht auf die übergeordnete Shell auswirken. Wenn Sie ein Skript als normalen Befehl ausführen (z. B. scriptname.sh oder ), wird es in einem separaten Shell-Prozess ausgeführt. Wenn dieser Shell-Prozess beendet ist, werden die Auswirkungen dieser Befehle aufgehoben. Deshalb Skripte wie ich oft am Ende mit, ,, oder was auch immer - die Ursache Prozess, der in der neuen Umgebung ist, als eine interaktive Shell zu bestehen../scriptname.shexec shexec bashexec zsh

Wenn Sie dies nicht auf diese Weise tun möchten, können Sie das Skript nur in Ihrer interaktiven Hauptshell ausführen . In Bash können Sie dies mit tun

Quelle skript .sh

oder

.  Skriptname .sh

(Möglicherweise müssen Sie verwenden, wenn sich das Skript im aktuellen Verzeichnis befindet.) Ich bin mir ziemlich sicher, dass es dieselbe Funktionalität hat. Die Syntax kann unterschiedlich sein. Überprüfen Sie die Dokumentation für Ihre Shell../scriptname.shzsh

Wenn Sie Schwierigkeiten haben, sich dies zu merken (oder wenn es umständlich wird), sollten Sie einen Alias ​​definieren.