.

           .

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
}

관련 정보