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?
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
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.
Tags und Links bash