テキストファイルを使用して実行可能ファイルに複数のコマンドライン引数を渡す

テキストファイルを使用して実行可能ファイルに複数のコマンドライン引数を渡す

4つのコマンドライン引数を受け入れるC実行可能ファイルがあります。

program <arg1> <arg2> <arg3> <arg4>

テキストファイルで提供される引数を使用して、実行可能ファイルを継続的に実行するシェルスクリプトを作成したいと思います。アイデアは次のとおりです。

./program "$(< arg1.txt)" "$(< arg2.txt)" "$(< arg3.txt)" "$(< arg4.txt)"

実行用に提供されたパラメータはファイルの各行nにあります。nこれを行うと、printf()呼び出しが互いに干渉したり、他の面白いことが起こります。任意の方法でパラメータが区切られた単一のファイルのみを許可するスクリプトを使用することもできます。

ベストアンサー1

while 
  IFS= read -r a1 <&3 &&
    IFS= read -r a2 <&4 &&
    IFS= read -r a3 <&5 &&
    IFS= read -r a4 <&6
do
  ./program "$a1" "$a2" "$a3" "$a4" 3<&- 4<&- 5<&- 6<&-
done 3< arg1.txt 4< arg2.txt 5< arg3.txt 6< arg4.txt

ファイルの1つが使い果たされるまでループが実行されます。 sをs&&に置き換えて、||次まで実行します。みんな代わりにファイルが使い果たされます(短いファイルの場合は空の引数を使用)。

GNUを使用すると、xargs次のこともできます。

paste -d '\n' arg[1-4].txt | xargs -n 4 -r -d '\n' ./program

(注意事項は./program標準入力ですが/dev/null

おすすめ記事