대화 형 스크립트; 루프 내 프롬프트


1

파일을 읽는 루프 내에서 쉘 스크립트 (ksh)의 입력을 요구하는 방법은 무엇입니까?

스크립트는 파일을 읽습니다. 각 루프 패스에서 취소 여부를 묻는 메시지가 표시됩니다. 이 함수는 루프 외부에서 올바르게 작동합니다. 루프 내에서 변수는 파일의 행으로 채워집니다. 스크립트는 상호 작용을 위해 멈추지 않습니다.

어떤 아이디어?

스크립트 :

######################################################
func_yesno(){
echo "cancel y/n?"
read answer
echo Your answer: $answer
case $answer in
  y*|Y*) exit 0 ;;
  n*|N*) echo ok ;;
  *) echo wrong! ;;
esac
}

func_yesno

while read line
do
        echo line: $line
        func_yesno
done < /tmp/in.txt

func_yesno
######################################################

입력 파일 in.txt :

Koeln
Aachen
Muenchen
Hamburg
Berlin

출력 :

# /tmp/a.sh
cancel y/n?
n
Your answer: n
ok
line: Koeln
cancel y/n?
Your answer: Aachen
wrong!
line: Muenchen
cancel y/n?
Your answer: Hamburg
wrong!
line: Berlin
cancel y/n?
Your answer:
wrong!
cancel y/n?
n
Your answer: n
ok

답변:


-1

함수의 read 명령이 while 루프와 동일한 표준 입력을 사용하고 있습니다. read. 다른 파일 설명자를 사용하십시오. 또한이 함수는 더 간단 할 수 있습니다.

func_yesno() {
    typeset answer PS3="Cancel (y/n)?"
    select answer in Yes No; do
        case $answer in
            Yes) exit 0 ;;
            No) echo "ok"; break ;;
        esac
    done
}

while read -u3 line; do 
    echo "line: $line"
    func_yesno
done 3< unique.txt

그것은 그렇습니다. 아무 문제가 없습니다.
MariusMatutiae

두 개의 while 루프를 중첩 할 필요가 없습니다.
MariusMatutiae

내 의견에 귀하의 의견을 추가하십시오. 2 곳의 대화를 따라갈 수 없습니다.
glenn jackman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.