次のようなコマンドを実行したい:
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 " " ","
はスペースをコンマに置き換えます。
上記で を使用することで、cat
POSIX 互換性が維持されることに注意してください。つまり、たとえば、このコマンドは、/bin/sh
Ubuntu や Debian などのシステムのデフォルトのシェル で動作します。
答え2
どうですか
command argument --parameter=$(tr '\n' ',' < params.txt)