Befehlszeilenargumente aus einem Dateiinhalt
Wie schalte ich die Datei-Inhalte in ein argument für einen Unix-Befehl?
Drehen ein argument in Datei-Inhalten erfolgt als:
echo ABC > file.txt
Aber die andere Richtung?
InformationsquelleAutor der Frage Yoo | 2010-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr shell ist bash (unter anderem), eine Abkürzung für
$(cat afile)
ist$(< afile)
so würden Sie schreiben:Dokumentiert in der bash man-Seite in der "Command Substitution".
Alterately, haben Sie Ihren Befehl von stdin Lesen, also:
mycommand < file.txt
InformationsquelleAutor der Antwort glenn jackman
Wie bereits erwähnt, können Sie die backticks oder
$(cat filename)
.Was nicht erwähnt wurde, und ich denke, ist wichtig zu beachten, ist, dass Sie müssen daran denken, dass die Schale bricht auseinander, den Inhalt der Datei nach whitespace-Zeichen, so dass jeder "zu Wort" es findet auf Ihren Befehl als argument. Und während Sie möglicherweise in der Lage zu umschließen, ein command-line-argument in Anführungszeichen, so dass es auch Leerzeichen enthalten darf, escape-Sequenzen, etc., das Lesen aus der Datei wird nicht die gleiche Sache. Zum Beispiel, wenn Ihre Datei enthält:
den Argumenten, die Sie erhalten, sind:
Wenn Sie möchten, ziehen Sie jede Zeile als argument verwenden, die während/Lesen/tun konstruieren:
InformationsquelleAutor der Antwort Will
Tun Sie das mit backticks:
InformationsquelleAutor der Antwort Tommy Lacroix
übergeben wird der Inhalt der Datei, um den Befehl über stdin, sondern Streifen Zeilenumbrüche, das heißt, Sie konnte nicht Durchlaufen jede Zeile einzeln. Dafür könnten Sie ein Skript schreiben mit einer 'for' Schleife:
InformationsquelleAutor der Antwort Wesley Rice
Wenn Sie dies tun wollen, in einer stabilen Art und Weise für alle möglichen Kommandozeilen-argument (- Werte mit Leerzeichen, die Werte mit newlines, Werte mit den wörtlichen Zitat-Zeichen, nicht druckbare Werte, Werte mit glob-Zeichen, etc), wird es ein wenig interessanter.
In eine Datei schreiben, da ein array von Argumenten:
...ersetzen mit
"argument one"
"argument two"
usw. als angemessen ist.Lesen aus dieser Datei und verwenden Ihrer Inhalte (in der bash, ksh93, oder einem anderen kürzlich erschienenen shell mit arrays):
Lesen aus dieser Datei und Ihr Inhalt (in einer shell ohne arrays; beachten Sie, dass dies überschreibt Ihre lokalen command-line-argument-Liste, und ist somit am besten innerhalb einer Funktion, so dass Sie überschreiben die Argumente der Funktion und nicht der globalen Liste):
Beachten Sie, dass
-d
(ermöglicht eine unterschiedliche end-of-line-Trennzeichen verwendet werden) ist eine non-POSIX-Erweiterung und eine Schale ohne arrays können auch nicht unterstützen. Sollte das der Fall sein, müssen Sie möglicherweise verwenden Sie eine nicht-shell-Sprache zu verwandeln, die NUL-separierte Inhalte in eineeval
-safe-form:InformationsquelleAutor der Antwort Charles Duffy
Hier ist, wie gebe ich Inhalt einer Datei als argument an einen Befehl:
InformationsquelleAutor der Antwort chovy
In meinem bash-shell den folgenden arbeitete wie ein Charme:
wo input_file
Als offensichtlich, dies ermöglicht die Ausführung mehrerer Kommandos mit jeder Zeile aus der Eingabedatei, eine nette kleine trick, den ich gelernt hier.
InformationsquelleAutor der Antwort honkaboy