Angeben von kommagetrennten Kommandozeilenparametern basierend auf Textdateizeilen

Angeben von kommagetrennten Kommandozeilenparametern basierend auf Textdateizeilen

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 catfunktioniert ./bin/sh

Antwort2

Wie wäre es mit

command argument --parameter=$(tr '\n' ',' < params.txt)

verwandte Informationen