Como espero 'echo -e “? \ c ”'?

2

Pediram-me para escrever um script que interage com outro - mas estou preso. O script que eu interajo com echos o seguinte e eu preciso enviar um "1" de volta. Mas eu não consigo chegar lá ...

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

Até agora eu tentei - tanto quanto me lembro:

expect "?"
send "1" 

expect "? "
send "1"

expect "? \n"
send "1"

expect "? \c"
send "1"

Tudo parece não funcionar. Alguém pode me dar uma cotovelada na direção certa ...? :)

P.S .: Eu suponho que precisarei adicionar um \r ao 1 quando eu der o primeiro obstáculo ...

    
por Christian 17.12.2014 / 18:38

2 respostas

1

Em echo -e "? \c" , a parte \c não é nada que seja impressa, é uma diretiva para o comando echo para não imprimir uma nova linha depois que a sequência passar como um argumento¹. Então, esperamos que você espere a string "? " (ponto de interrogação, espaço). Como o argumento do comando expect é um padrão em que ? é um curinga, você precisa interpretar o ponto de interrogação literalmente:

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

¹ Algumas outras implementações de echo , como o bash builtin, usam a sintaxe echo -n "?" para isso.

    
por 18.12.2014 / 02:20
0

Você está quase lá. Considere usar o read incorporado em (De TDLP: captura de entrada de usuário ):

Exemplo de leitura

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

Aviso Linha 6 . A variável year é criada na hora, por BASH para conter a saída para a instrução echo.

Testando o exemplo de entrada do usuário

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

No seu caso particular, você substituiria Linha 5 pela lista de opções do script e, a partir da linha 17, modificaria if para corresponder à opção que você passou como ANS . Se a opção corresponder ao if , execute seu script, como em sh myscript.sh --option ANS

    
por 17.12.2014 / 19:00