0

私は問題を抱えています.bashを書くのは初めてです。csv ファイルを解析して、いくつかのことを確認しています。チェックが真の場合、後でファイルに書き込まれる変数を変更します。入力ファイルを読み取り、ファイルにも出力しています。特定の引数が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
4

1 に答える 1

0

ここで自分の問題を解決しました。デフォルトで読み取りが標準入力から読み取られていることがわかりました。入力を求めようとしたとき、標準入力を使用していたので、読んでいた行は技術的には標準入力入力でした。私が行った方法で while ループでファイルを読みたい場合は、次のように fd を変更する必要があります。

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

キーは「6」で、任意の数字にすることができます。

于 2013-08-23T19:54:40.333 に答える