解析csv文件$ INPUT,写入$ OUTPUT,并在while循环中提示用户输入 - 用户未提示

时间:2013-08-23 15:05:31

标签: bash csv input output prompt

我有一个问题,我很擅长编写bash。我正在解析一个csv文件,检查一些事情。如果检查为true,则更改稍后将写入文件的变量。我正在读取输入文件并输出到文件,如果某个参数检查为True,那么我想提示用户并暂停脚本,直到用户验证信息匹配(手动验证)。

我最近的尝试没有提示。它只是继续读取和写入输出。我很确定因为输出直接输出到我的输出文件,但是我不知道如何将提示指向终端窗口,这就是我被卡住的地方。

INPUT=$TMPSAVE
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read cdwon cdwod manu_date hp_sn manu_sn wiped_by wiped_date checked_by disposition readonly
do
    for i in ${!allassigned[@]}
    do
            if [[ -n $manu_sn ]]
            then
                    if echo ${allassigned[i]} | grep -q $manu_sn
                    then
                            physicaldrive=${allassigned[i-1]}
                            disk=$(hpacucli ctrl slot=${SLOT} show config detail | grep -B 4 ${physicaldrive} | head -1 | awk '{print $NF}');
                            if [[ -n $disk ]]; then #proceed to wipe drive
                                    mount ${disk}${PRIMARY} ${MOUNT}
                                    if [ -e $DIR ]; then
                                    ####### the file exists, now what to do with it? Automatcially prompt user?
                                            cat $DIR > /dev/tty
                                            echo "Does the drive serial number (${allassigned[i]}) match what was provided from the database ($manu_sn)? (y/n)" > /dev/tty
                                            read
                                            if [ "$REPLY" == "Y" ] || [ "$REPLY" == "y" ] || [ "$REPLY" == "YES" ] || [ "$REPLY" == "yes" ]; then
                                                    checked_by=$username
                                                    checked_bydate=`date`
                                            fi
                                    fi
                            fi
                    fi
            fi
    done
    echo "$cdwon,$cdwod,$manu_date,$hp_sn,$manu_sn,$wiped_by,$wiped_date,$checked_by,$disposition,$readonly";
    continue;
done < $INPUT > $OUTPUT

1 个答案:

答案 0 :(得分:0)

我在这里解决了自己的问题。我发现默认情况下读取是从stdin读取的。当我试图提示输入时它正在使用stdin,所以我正在阅读的行在技术上是stdin输入。如果你想用我已经完成的方法读取while循环中的文件,你必须像这样更改fd:

while read -u 6 column1 column2
do
.....body
done 6< $INPUTFILE

键是“6”,可以是任意数字。