Das sollte funktionieren:
./program `cat file`
Wenn Sie den gesamten Dateiinhalt in einem einzigen Argument haben möchten, fügen Sie doppelte Anführungszeichen hinzu (getestet in Bash. Ich denke, es kann von Shell zu Shell variieren):
./program "`cat file`"
Befehl
./program "$(< file)"
Erklärung
-
$(cmd)
führt einen Befehl aus und wandelt seine Ausgabe in einen String um.$(cmd)
kann auch mit Backticks als`cmd`
geschrieben werden . Ich bevorzuge das neuere$(cmd)
da es sich besser verschachtelt als die Backticks der alten Schule. -
Der gewünschte Befehl ist
cat file
. Und dann von der Bash-Manpage:Die Befehlsersetzung
$(cat file)
kann durch das äquivalente, aber schnellere$(< file)
ersetzt werden . -
Die Anführungszeichen darum herum stellen sicher, dass Leerzeichen erhalten bleiben, nur für den Fall, dass Sie Leerzeichen oder Zeilenumbrüche in Ihrer Datei haben. Das korrekte Zitieren von Dingen in Shell-Skripten ist eine Fähigkeit, die schmerzlich fehlt. Variablen und Befehlsersetzungen in Anführungszeichen zu setzen, ist eine gute Angewohnheit, damit Sie später nicht gebissen werden, wenn Ihre Dateinamen oder Variablenwerte Leerzeichen oder Steuerzeichen oder andere Seltsamkeiten enthalten.
Sie können einen der folgenden verwenden:
./program $(cat file)
./program "$(cat file)"
Letzteres ist nützlich, wenn die Datei möglicherweise mehrere Wörter enthält und Sie möchten, dass sie als einzelnes Argument behandelt werden. Auf jeden Fall bevorzuge ich die Verwendung von if $()
zu Backticks, einfach weil es verschachtelt werden kann (was wahrscheinlich keine Voraussetzung ist). in diesem Fall).
Denken Sie auch daran, dass diese Antwort (und andere) eher mit der verwendeten Shell als mit Linux selbst zusammenhängen. Da das vorherrschende
Shell scheint bash
zu sein , ich habe speziell dafür codiert.
Dies ist tatsächlich eine ziemlich übliche Art, Prozesse unter UNIX-Lookalikes zu beenden. Ein Daemon (wie cron
) schreibt seine Prozess-ID in eine Datei (wie /var/cron.pid
) und Sie können es mit etwas wie:
kill -HUP $(cat /var/cron.pid)