Wie zu verwenden Inhalt der Datei als Kommandozeilen-Argumente?
Ich möchte die Argumente aus der Datei als Kommandozeilen-Argumente für einige Befehle, wie gcc oder ls.
Beispielsweise gcc -o output -Wall -Werro
als Datei bestehen aus:
-o output -Wand -Werro
Verwendet für gcc command-line Aufruf.
gcc $(cat filename.txt)
-- Vielleicht brauchen Zitate.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
xargs
:Edit: ich habe downvoted weil Laurent weiß nicht, wie
xargs
funktioniert, also hier ist der Beweis:Den
-t
flag bewirkt, dass der Befehl geschrieben werdenstderr
vor der Ausführung.gcc -o output -Wall -Werro
. Versuchen Sie es selbst, wenn Sie es nicht glauben.Einige Programme verwenden Sie das " @ " - Semantik zu füttern, in args, die aus einer Datei
zB. gcc @argfile
Denen, für die gcc, argfile enthält Optionen
Diese können auch verschachtelt werden, so dass argfile enthalten kann
http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Overall-Options.html#Overall-Options
cmd
Empfehle ich
$()
zusammen mit Katze:Die nette Sache über
$()
über backticks (die klassische Art) ist, dass es einfacher ist, um ein nest in einem anderen:$()
syntax kennt, weiß auch, wie offen und redirect in der Datei selbst, dass die Notwendigkeit für eine nutzlosecat
Prozess. Zum Beispielgcc $(<filename)
wird das gleiche tun, unter der Bash.mit bash
Meisten der Zeit, Befehls-substitution (entweder durch backticks
oder $(), wie andere haben darauf hingewiesen) ist in Ordnung, aber Hüte dich vor der shell
ausbau Regeln. Vor allem, Bedenken Sie, dass unquoting ist getan
vor - und word-splitting erfolgt nach Kommando-substitution.
Dies ist nicht allzu schlimm, wenn alle deine Argumente sind Worte, aber wenn Sie
beginnen, Leerzeichen oder andere spezielle Zeichen, die würde
normalerweise müssen zitiert werden, in Ihren Argumenten, dann können Sie erfüllen
mit seltsamen Ergebnissen (beachten Sie die abnorme Abstand und Anführungszeichen in
der Ausgang):
Zitieren Sie den gesamten Befehl subtitution ist keine Lösung,
offensichtlich, denn es würde verhindern, dass word splitting (daher, Ihre gesamte
Datei-Inhalte erscheinen würde, als ein langes argument anstelle von vielen
Optionen), und würde nichts tun, um die Zitate.
Einer Lösung, um dieses ist die Verwendung der eval-builtin:
N. B.: echo ist vielleicht nicht das beste Beispiel-Befehl hier; möchten Sie vielleicht
ersetzen Sie es mit etwas anderes, wie z.B. die folgende Funktion: