y/n 대답을 묻는 쉘 스크립트가 있습니다. 입력을 하기 전 프롬프트에서 신호 처리 기능을 호출하는 control-c 신호를 사용했습니다. 신호 처리 기능에는 종료하기 위한 프롬프트 "q"가 있습니다. 그렇지 않으면 "y"와 "y"를 FIRST 읽기 프롬프트와 함께 사용해야 합니다.
(( echo "y" | read ))를 시도했지만 작동하지 않았습니다.
이것은 내 스크립트의 일부입니다.
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
echo "y" | read ----->here I need "y" to be an input to read prompt
directly and being saved in "ans" variable in
main body where I used control-c
fi
}
trap 'IntHandle' SIGINT
read -p "no valid user id entered, new user ids? [y\n]: " ans ----> here
used control-c signal before give y/n to ans
if [[ $ans == "y" ]]
then
read -p " username :" name
fi
.
.
.
.
.
출력은 아래와 같아야 합니다.
유효한 사용자 ID가 입력되지 않았습니다. 새 사용자 ID가 있습니까? [y\n]: #control-c가 입력되었습니다.
' 종료하려면 'q'를 사용하세요. y ------> 여기에서 "y"는 Siganl Handeling 함수에서 "q"를 입력한 다음 사용자 이름을 묻는 조건이 true가 되는 "ans" 변수에 저장됩니다.
사용자 이름: Larry -----> true 조건 다음에 입력되는 이름입니다. . . .
답변1
이것은 XY 문제입니다. read
스크립트에서 변수를 설정하는 데 도대체 왜 사용합니까 ?
일반적인 방법으로 설정하십시오.ans=y
이렇게 하면 함수가 다음과 같이 보입니다.
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
ans=y
fi
}