Ich habe eine Datei namens cmd, die wie folgt eine Liste von Unix-Befehlen enthält:
%Vor%Ich habe ein anderes Skript, das die Befehle in cmd wie folgt ausführt:
%Vor%Das Problem besteht darin, dass Befehle in cmd ohne Leerzeichen ordnungsgemäß ausgeführt werden, solche mit Leerzeichen jedoch vom Skript nicht korrekt interpretiert werden. Folgendes ist die Ausgabe:
%Vor%Was fehlt mir hier?
Versuchen Sie, die eine Zeile in eval $cmds
anstatt nur in $cmds
Sie können Ihr Skript durch den Befehl
ersetzen %Vor%Die Aufgabe der Shell besteht darin, Befehle zu lesen und auszuführen! Wenn Sie Ausgabe- / Fortschrittsanzeigen möchten, führen Sie die Shell im ausführlichen Modus
aus %Vor%Mir persönlich gefällt diese Vorgehensweise besser - ich möchte die IFS nicht in die Irre führen, wenn ich das nicht tun muss. Sie müssen ein Eval verwenden, wenn Sie Pipes in Ihren Befehlen verwenden möchten. Die Pipe muss von der Shell und nicht vom Befehl verarbeitet werden. Ich glaube, die Shell analysiert die Pipes vor den expandierenden Strings.
Beachten Sie, dass ein Problem auftreten kann, wenn Ihre cmd-Datei Befehle enthält, die Eingaben erfordern. (Sie können jedoch immer ein neues fd für den Lesebefehl erstellen, aus dem gelesen werden soll.)
%Vor%EDIT: Der Kommentar von Ben Blank wies darauf hin, dass meine alte Antwort falsch war, danke.
Sieht so aus, als würden Sie Befehle als einzelne Zeichenfolge ausführen, also sieht bash sie als den Namen der Prozedur / der Programmdatei an.
Eine Möglichkeit, dies zu vermeiden, wäre, bash auf dem Befehl aufzurufen. Änderung:
%Vor%bis
%Vor%sed 'aXX' hängt XX an jede Zeile an. Dies funktioniert nicht für Multiline-Befehle wie:
%Vor%aber für einzeilige Befehle sollte es in den meisten Fällen reichen.