Bearbeiten Sie das Shell-Skript, während es ausgeführt wird
Bearbeiten können Sie ein shell-Skript, während es läuft und haben die änderungen Auswirkungen auf den Laufenden Skript?
Bin ich neugierig auf den spezifischen Fall von einem csh-Skript habe ich diese batch führt eine Reihe von verschiedenen Bau-Aromen und läuft die ganze Nacht. Wenn etwas geschieht, was mir Mitte der operation, würde ich mag zu gehen, und fügen Sie zusätzliche Befehle, oder kommentieren Sie Sie aus un-ausgeführt, diejenigen.
Wenn nicht möglich, gibt es eine shell-oder batch-Mechanismus, der es mir erlauben würde, dies zu tun?
Natürlich habe ich es probiert, aber es werden Stunden, bevor ich sehe, ob es geklappt hat oder nicht, und ich bin gespannt, was passiert oder nicht passiert hinter den kulissen.
InformationsquelleAutor der Frage ack | 2010-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scripte nicht funktionieren auf diese Weise; die Ausführung Kopie ist unabhängig von der Quelle-Datei, die Sie Bearbeiten. Das nächste mal das Skript ausgeführt wird, es wird auf die zuletzt gespeicherte version der source-Datei.
Könnte es klug sein, zu brechen, der dieses Skript in mehrere Dateien, und führen Sie Sie einzeln. Dies reduziert die Ausführungszeit zu Versagen. (ie, split batch in eine build-Aroma-Skripte, die ausgeführt einzeln um zu sehen, welcher Schwierigkeiten verursacht).
InformationsquelleAutor der Antwort ford
[Bearbeiten] Siehe auch diese Antwort, Abschnitt 3 für workarounds.
Es hat beeinflussen, zumindest die bash in meiner Umgebung, aber in sehr unangenehme Weise. Finden Sie diese codes. Erste
a.sh
:b.sh
:Tun
In meinem Fall, der output ist immer:
Dies ist unberechenbar, so gefährlich. Sehen diese Antwort, Abschnitt 3 für workarounds.
[Hinzugefügt] Das genaue Verhalten hängt davon ab, einen zusätzlichen Zeilenumbruch, und vielleicht auch auf Unix-System, Dateisystem, etc. Wenn Sie wollen einfach nur, um zu sehen, einige Einflüsse, fügen Sie einfach "echo foo/bar" auf b.sh vor und/oder nach der "Lesen" - Zeile.
InformationsquelleAutor der Antwort teika kazura
Versuchen, diese... erstellen Sie eine Datei namens "bash-is-odd.sh":
Dass zeigt, dass die bash ist in der Tat interpretieren Sie das Skript "wie Sie gehen". In der Tat, die Bearbeitung eine lang andauernde Skript hat unvorhersehbare Ergebnisse, einfügen von zufälligen Zeichen etc. Warum? Da die bash liest aus die Letzte byte-position, so dass die Bearbeitung verschiebt sich die Position des aktuellen Zeichens Lesen.
Bash ist, in einem Wort, sehr, sehr unsicher, da Sie dieses "feature". svn und rsync verwendet werden, wenn mit bash-Skripts sind besonders beunruhigend, weil Sie standardmäßig so "verschmelzen" die Ergebnisse... - Bearbeitung im Ort. rsync hat einen Modus, der dies behebt. svn und git nicht.
Präsentiere ich eine Lösung. Erstellen Sie eine Datei namens "/bin/bashx":
Nun verwenden:#! /bin/bashx auf Ihre Skripte und laufen immer mit "bashx" anstelle von bash. Dieser behebt das Problem - Sie können sicher rsync-Skripte.
Alternative (in-line) vorgeschlagenen Lösung/getestet von @AF7:
Geschweifte Klammern schützen gegen änderungen, und beenden Sie schützt vor hängt. Natürlich würden wir uns alle viel besser dran, wenn bash kam mit einer option wie "- w " (ganze Datei), oder etwas, das dies Tat.
InformationsquelleAutor der Antwort Erik Aronesty
Brechen Sie Ihr Skript in Funktionen, und jedes mal, wenn eine Funktion aufgerufen wird, Sie
source
es aus einer separaten Datei. Dann könnte man die Dateien Bearbeiten zu jeder Zeit und dein script läuft Holen die Veränderungen der nächsten Zeit wird es bezogen.InformationsquelleAutor der Antwort glenn jackman
Habe ich nicht csh installiert, aber
Ausführen, Bearbeiten Sie schnell und einfach die Letzte Zeile zu Lesen
Ausgabe
Hrmph.
Ich denke, bearbeitet die shell-Skripte nicht wirksam, bis Sie erneut.
InformationsquelleAutor der Antwort dave4420
Wenn das alles in einem einzigen script, dann Nein, es wird nicht funktionieren. Jedoch, wenn Sie es als eine Treiber-Skript aufrufen von sub-scripts, dann sind Sie vielleicht in der Lage zu ändern ein sub-Skript, bevor Sie es genannt wird, oder bevor es wieder aufgerufen, wenn Sie die Schleife, und in diesem Fall glaube ich, dass diese änderungen spiegeln sich in der Ausführung.
InformationsquelleAutor der Antwort Ethan Shepherd
Ich höre keine... aber was ist mit einigen Dereferenzierung:
BatchRunner.sh
Command1.sh
Command2.sh
Dann sollten Sie in der Lage sein, Inhalte zu editieren, die jedem Befehl die Datei vor BatchRunner bekommt es richtig?
ODER
Eine sauberere version würde BatchRunner Blick auf eine einzelne Datei, wo es nacheinander ausführen, eine Zeile zu einem Zeitpunkt. Dann sollten Sie in der Lage sein zu Bearbeiten, die zweite Datei, während die erste läuft gerade?
InformationsquelleAutor der Antwort ack
normalerweise ist es ungewöhnlich, zu Bearbeiten, Skript, während Sie läuft. Alles, was Sie tun müssen, ist Kontrolle-check für Ihren Betrieb. Verwenden Sie if/else-Anweisungen für Bedingungen überprüfen. Wenn etwas fail ist, dann Tue dies, else Tue das. Das ist der Weg zu gehen.
InformationsquelleAutor der Antwort ghostdog74