テキストファイルの行に基づいてカンマ区切りのコマンドラインパラメータを指定する

テキストファイルの行に基づいてカンマ区切りのコマンドラインパラメータを指定する

次のようなコマンドを実行したい:

command argument --parameter=param1,param2,param3

ここで、param1、param2、param3 は、ファイル params.txt から取得される任意の数のパラメータであり、それぞれ 1 行に記述されます。

正しいパラメータのリストを作成するには

echo $(cat common.modules) | tr " " ","

しかし、

command argument --parameter=$(cat params.txt) | tr " " ","

そして、その明らかなバリエーションは失敗します。おそらく、次のようなものを動作させることができないからでしょう:

echo $($(cat params.txt) | tr " " ",")

ご協力いただければ幸いです。

答え1

質問からこのコマンドを見てみましょう:

command argument --parameter=$(cat params.txt) | tr " " ","

これにより、コマンドが実行されcommand argument --parameter=$(cat params.txt)、その出力が にパイプされますtr " " ","。これは必要なことではありません。

試す:

command argument --parameter="$(echo $(cat params.txt) | tr " " "," )"

ここで、echo $(cat params.txt)は の内容に対して単語分割を実行しますparams.txt。これにより、すべてのパラメータがスペースで区切られます。次に、tr " " ","はスペースをコンマに置き換えます。

上記で を使用することで、catPOSIX 互換性が維持されることに注意してください。つまり、たとえば、このコマンドは、/bin/shUbuntu や Debian などのシステムのデフォルトのシェル で動作します。

答え2

どうですか

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

関連情報