2012-03-11 7 views
3

私は、csvファイルからデータを取り出し、データを操作し、変更が正しいかどうかをユーザーに尋ねるスクリプトを作成しています。問題は、ファイルを読み込んでいるwhileループの中でreadコマンドを実行するように見えないことです。以下のテストスクリプトが含まれています。ファイルが実際には使用されていないことを条件として作成する必要があることに注意してください。これは、私が取り組んでいるより大きいスクリプトからの単なる抜粋です。私は動作するようだが、これを回避する方法があるかどうか知りたいアレイを使用するように記録していますか?私はいくつかのbashガイドを読んできたし、manページは読んで答えを見つけていない。前もって感謝します。ファイルを読むループ内でBashを読む

#!/bin/bash 
######### 
file="./in.csv" 
OLDIFS=$IFS 
IFS="," 
######### 

while read custdir custuser 
do 
    echo "Reading within the loop" 
    read what 
    echo $what 
done < $file 

IFS=$OLDIFS 
+0

あなたが何をしようとしてのためのより良い選択であるように 'awk'を見つけるかもしれません。 –

答えて

7

ファイルハンドルを操作して、古い標準入力にアクセスできるようにすることができます。それは最初に標準入力(ファイルハンドル0)を保存することによってこれを行い

while read line 
do 
    echo " Reading within the loop: [$line]" 
    echo -n " What do you want to say? " 
    read -u 3 something 
    echo " You input: [$something]" 
done 3<&0 <qq.sh 

:たとえば、このファイルqq.shはまた、あなたの各行の後に質問をして、それ自体を読んで、あなたのreadループを使用して各ラインを印刷し、ますファイルにそのファイルハンドル3.シンプルな転写産物からの読み取りにread -u <filehandle>バリアントを使用して、3<&0と3を扱う:

pax> ./qq.sh 
    Reading within the loop: [while read line] 
    What do you want to say? a 
    You input: [a] 
    Reading within the loop: [do] 
    What do you want to say? b 
    You input: [b] 
    Reading within the loop: [echo "Reading within the loop: [$line]"] 
    What do you want to say? c 
    You input: [c] 
    Reading within the loop: [echo -n "What do you want to say? "] 
    What do you want to say? d 
    You input: [d] 
    Reading within the loop: [read -u 3 something] 
    What do you want to say? e 
    You input: [e] 
    Reading within the loop: [echo "You input: [$something]"] 
    What do you want to say? f 
    You input: [f] 
    Reading within the loop: [done 3<&0 <qq.sh] 
    What do you want to say? g 
    You input: [g] 
    Reading within the loop: [] 
    What do you want to say? h 
    You input: [h] 
pax> _ 
+0

おかげで、どうやってそれを修正しているのか聞いていました。これは小さなテストスクリプトで動作し、実際のスクリプトに組み込むようになりました。再度、感謝します。 – SoulNothing