Bash 스크립트에서 "예상"과 유사한 동작

Bash 스크립트에서 "예상"과 유사한 동작

parent.sh입력 매개변수를 기반으로 다른 스크립트를 호출하는 스크립트(이름을 지정하겠습니다)가 있습니다 .

마지막으로 스크립트를 호출합니다 child.sh.
child.sh일부 파일이 이미 존재하는 것으로 확인되면 사용자 입력을 요청하십시오.

"Would you like to replace the configuration file with a new one? (Yes/No/Abort): "

이제 내가 하고 싶은 것은 키 입력을 시뮬레이션하는 것입니다."예"/"y"parent.sh파일을 항상 덮어쓰도록 스크립트 내부에 저장합니다 .

할 수 없다사용 expect.

어떻게 해야 하나요?

답변1

비록yes | child.sh직원child.sh언급된 내용은 프로그래머의 관점에서 볼 때 유효한 솔루션이며 이 사용 사례를 처리할 수 있도록 노력하겠습니다 .

예를 들어 --force메시지를 표시하지 않고 항상 파일을 덮어쓰는 옵션을 추가합니다.

그러나 질문의 ​​주제에 답하고 파이프를 통해 점화하는 expect대신 다음과 같은 것을 얻으려면 다음을 수행하십시오 y.

#!/bin/bash

fifo=fifo

mkfifo ${fifo}

exec 3<> ${fifo}

expect="Would you like to replace the configuration file with a new one? (Yes/No/Abort): "
answer="y"

while IFS= read -d $'\0' -n 1 a ; do
    str+="${a}"

    if [ "${str}" = "${expect}" ] ; then
        echo "!!! found: ${str}"
        echo ">>> sending answer: ${answer}"
        echo "${answer}" >&3
        unset str
    fi

    if [ "$a" = $'\n' ] ; then
        echo -n "--- discarding input line: ${str}"
        unset str
    fi
done < <(./child.sh <${fifo})

rm ${fifo}

방금 쓴 글입니다.. 그래서 실제로는 안전하지 않거나 특정 문제를 해결하기 위해 테스트되지 않았습니다.. 따라서 사용자 책임하에 사용하십시오. 8) 특정 조건에서는 라인 버퍼링 문제가 있을 수 있습니다..

그러나 적어도 내 테스트 시나리오에서는 작동합니다.

관련 정보