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) 특정 조건에서는 라인 버퍼링 문제가 있을 수 있습니다..
그러나 적어도 내 테스트 시나리오에서는 작동합니다.