exec Zeile aus Datei in bash

8

Ich versuche, Befehle aus einer Textdatei zu lesen und jede Zeile aus einem Bash-Skript auszuführen.

%Vor%

In einigen Fällen, wenn $line Befehle enthält, die im Hintergrund ausgeführt werden sollen, zB command 2>&1 & , starten sie nicht im Hintergrund und werden im aktuellen Skriptkontext ausgeführt.

Irgendwelche Ideen warum?

    
Quamis 28.08.2010, 01:08
quelle

2 Antworten

8

Wenn alle Befehle in "commands.txt" enthalten sind, können Sie es im Wesentlichen als Shell-Skript bezeichnen. Deshalb können Sie es entweder als Quelle verwenden oder es wie normal ausführen, dh chmod u + x, und dann können Sie es mit sh commands.txt

ausführen     
ghostdog74 28.08.2010, 01:32
quelle
2

Ich muss der Antwort von ghostdog74 nichts über die richtige Vorgehensweise hinzufügen, aber ich kann erklären, warum es scheitert: Die Shell analysiert E / A-Umleitungen, Hintergrundinformationen und eine Menge anderer Dinge, bevor sie variabel ist Expansion, so dass $line durch command 2>&1 & ersetzt wird, ist es zu spät, um 2>&1 und & als etwas anderes als Parameter für command zu erkennen.

Sie können dies verbessern, indem Sie eval "$line" verwenden, aber selbst dort werden Sie Probleme mit mehrzeiligen Befehlen bekommen (z. B. while-Schleifen, if-Blöcken usw.). Die Ansätze source und sh haben dieses Problem nicht.

    
Gordon Davisson 28.08.2010 02:52
quelle

Tags und Links