ファイルからプログラムへの入力リダイレクト

ファイルからプログラムへの入力リダイレクト

ファイルから入力を読み取ることができるプログラムを作成しようとしました。私のプログラムは次のとおりです

#!/bin/bash
num=$(($1 + $2))
echo $num

私の入力テスト:

1
1

使った

./prog < test1.in

ただし、エラーメッセージが表示されます。/prog
:ライン2:+:構文エラー:オペランドが必要です(エラーは「+」と表示されます)。

何が問題なの?ありがとうございます!

ベストアンサー1

ファイルから入力を読み取るプログラムを作成する代わりに、次の形式で入力を受け取るプログラムを作成します。位置パラメータ(別名コマンドラインパラメータ)リダイレクト演算子は、<ファイルデータをプログラムの標準入力ストリーム(別名stdin) - プログラムはこれを無視します。

最も簡単に標準入力から値ごとに1行を読み取るには、プログラムを次のように変更できます。

#!/bin/bash
read a
read b
num=$((a+b))
echo $num

これでテストファイルからリダイレクトした場合、stdin結果は次のようになります。

$ ./newprog < test1.in
2

あるいは、このxargsユーティリティを使用してファイルデータを読み取り、その内容をプログラムに引数として渡すこともできます。

$ xargs -a test1.in ./prog
2

おすすめ記事