私はシェルスクリプトを学んでいます。私はデータファイルを持っています。行は口座のデータを表します。ファイル入力で動いている文中のシェルスクリプトで明示的に標準入力で "read"関数を使うことはできますか?
データファイル:DATA.DAT
name0 domain0 password0
name1 domain1 # this line is lack of third data.
次のスクリプトは、ラインによって機能ラインを「読み取る」ことによって、すべてのデータのロードデータファイルを表示します。
スクリプトの例:
sh display_data.sh data.dat
によってdisplay_data.sh
#!/bin/sh
INPUT_FILE=$1
while read V1 V2 V3
do
if [ -z "$V3" ]; then
# when V3 is empty, I want to get it through standard input
# but it load data from $INPUT_FILE
read V3 # Here is my problem.
# read V3 < /dev/stdin # I want like this.
fi
echo "V1 = $V1, V2 = $V2, V3 = $V3"
done < $INPUT_FILE
実行スクリプトは、問題はしばらく文がのリダイレクトを使用していますので、私はしばらくの文内部標準入力で読み取る機能を使用することができなかったですデータファイル。 データファイルの3番目の列が不足している可能性があります。私は不足しているデータを入力するスクリプトを実行するユーザーを求めるだろう。
誰にも解決策や提案はありますか? ありがとうございます。
ありがとうFazlin。それは私にとって素晴らしい答えです。しかし、私は一点不安を持っています。それは5としてfdを指定しますが、私はいつもfd 5を使うことができますか? – mora
別のコメントは、重複のためにこの質問を削除しますか?私は感謝の念を示すために答えを受け入れたいと思いますが、私はこの質問を削除すると受け入れが削除されるのではないかと心配しています。どうもありがとうございました。 – mora
私はランダムにfdとして5を選択しました。あなたはfdとしてより大きな数字を使うことができますが、stdin/stdout/stderrのすべてのプロセスでデフォルトで使用されているようにfdとして数字<4を使用しません。これは正確に重複した質問ではありませんでしたが、同じ 'exec'ソリューションが両方の問題を解決するために使用できるので、私はリンクを参照しました。 – Fazlin