'echo -e "? \c"'는 어떻게 예상되나요?

'echo -e "? \c"'는 어떻게 예상되나요?

다른 스크립트와 상호 작용하는 스크립트를 작성해 달라는 요청을 받았지만 막혔습니다. 내가 상호작용하고 있는 스크립트는 다음을 반영합니다. "1"을 다시 보내야 합니다. 하지만 아직은 거기까지 갈 수가 없어요...

echo -e "Select option 1"
echo -e "? \c"

내가 지금까지 시도한 것 - 내가 아는 한:

expect "?"
send "1" 

expect "? "
send "1"

expect "? \n"
send "1"

expect "? \c"
send "1"

이 중 어느 것도 작동하지 않는 것 같습니다. 누군가 나에게 올바른 방향을 알려줄 수 있습니까? :)

\r1추신: 첫 번째 장애물을 넘고 나면 하나 더 추가해야 할 것 같습니다 ...

답변1

에서 echo -e "? \c"해당 부분은 아무것도 인쇄되지 않으며 인수로 전달된 문자열 뒤에 개행을 인쇄하지 않는 것이 \c명령의 지시입니다 . 따라서 예상에서는 문자열 (물음표, 공백) echo을 예상해야 합니다 . "? "명령에 대한 인수는 와일드카드가 포함 expect된 패턴이므로 ?물음표를 문자 그대로 해석해야 합니다.

expect -ex "? "
send "1\r"

¹ 일부 다른 구현 echo(예: bash 내장)에서는 echo -n "?"이 구문을 사용합니다.

답변2

거의 다 왔습니다. read내장된 기능 사용을 고려하십시오 (TDLP: 사용자 입력 캡처):

예시 읽기

cat leaptest.sh

#!/bin/bash
# This script will test if you have given a leap year or not.

echo "Type the year that you want to check (4 digits), followed by [ENTER]:"

read year

if (( ("$year" % 400) == "0" )) || (( ("$year" % 4 == "0") && ("$year" % 100 !=
"0") )); then
  echo "$year is a leap year."
else
  echo "This is not a leap year."
fi

알아채다6호선. year 변수는 BASH에 의해 동적으로 생성되며 echo 문의 출력을 저장하는 데 사용됩니다.

사용자 입력 테스트 예시

cat friends.sh

#!/bin/bash

# This is a program that keeps your address book up to date.

friends="/var/tmp/michel/friends"

echo "Hello, "$USER".  This script will register you in Michel's friends database."

echo -n "Enter your name and press [ENTER]: "
read name
echo -n "Enter your gender and press [ENTER]: "
read -n 1 gender
echo

grep -i "$name" "$friends"

if  [ $? == 0 ]; then
  echo "You are already registered, quitting."
  exit 1
elif [ "$gender" == "m" ]; then
  echo "You are added to Michel's friends list."
  exit 1
else
  echo -n "How old are you? "
  read age
  if [ $age -lt 25 ]; then
    echo -n "Which colour of hair do you have? "
    read colour
    echo "$name $age $colour" >> "$friends" 
    echo "You are added to Michel's friends list.  Thank you so much!"
  else
    echo "You are added to Michel's friends list."
    exit 1
  fi
fi

특정 경우에는 교체합니다.5호선스크립트의 옵션 목록을 사용하고 17행에서 시작하는 if를 수정하여 전달한 옵션과 일치시킵니다 ANS. 옵션이 일치하면 if아래와 같이 스크립트를 실행하십시오.sh myscript.sh --option ANS

관련 정보