Ich möchte einen Befehl wie diesen ausführen:
command argument --parameter=param1,param2,param3
wobei param1, param2, param3 eine beliebige Anzahl von Parametern aus der Datei params.txt sein können, jeweils in einer Zeile.
Ich kann eine korrekte Parameterliste erstellen mit
echo $(cat common.modules) | tr " " ","
Aber versuchen
command argument --parameter=$(cat params.txt) | tr " " ","
und seine offensichtlichen Varianten schlägt fehl, wahrscheinlich, weil ich so etwas nicht zum Laufen bekomme:
echo $($(cat params.txt) | tr " " ",")
Jede Hilfe ist herzlich willkommen.
Antwort1
Schauen wir uns diesen Befehl aus der Frage an:
command argument --parameter=$(cat params.txt) | tr " " ","
Dadurch wird der Befehl ausgeführt command argument --parameter=$(cat params.txt)
und seine Ausgabe wird an weitergeleitet tr " " ","
. Das ist nicht das, was Sie brauchten.
Versuchen:
command argument --parameter="$(echo $(cat params.txt) | tr " " "," )"
Hier echo $(cat params.txt)
bewirkt , dass der Inhalt von in Wörter aufgeteilt wird params.txt
. Dadurch werden alle Parameter durch Leerzeichen getrennt. Anschließend tr " " ","
ersetzt die Leerzeichen durch Kommas.
Beachten Sie, dass wir durch die Verwendung von oben die POSIX-Kompatibilität beibehalten. Dies bedeutet beispielsweise, dass dieser Befehl unter der Standard-Shell von Ubuntu, Debian und ähnlichen Systemen cat
funktioniert ./bin/sh
Antwort2
Wie wäre es mit
command argument --parameter=$(tr '\n' ',' < params.txt)