Você pode fazer isso com um documento :
cat <<EOF | ./buildgcc.sh
y
n
n
2
1
1
1
EOF
ou
./buildgcc.sh <<EOF
y
n
n
2
1
1
1
EOF
Eu tenho um problema no meu script de shell. Eu tento controlar uma instalação. Durante a instalação, há algumas perguntas que precisam ser respondidas. Como: "Digite sua escolha [1-3]:"
Eu quero fazer algo assim:
--> It's my first script <--
#!/bin/bash
echo "--> Install packages <--"
sudo apt-get install git
cd $HOME/
#mkdir mspgcc_download
#cd mspgcc_download
echo "--> Download mspgcc <--"
git clone git://mspgcc4.git.sourceforge.net/gitroot/mspgcc4/mspgcc4
cd mspgcc4
echo "--> Build mspgcc <--"
echo "y" | echo "n" | echo "" | echo "n" | echo "2" | echo "1" | echo "1" | echo "1" | ./buildgcc.sh
Você pode fazer isso com um documento :
cat <<EOF | ./buildgcc.sh
y
n
n
2
1
1
1
EOF
ou
./buildgcc.sh <<EOF
y
n
n
2
1
1
1
EOF
echo
será impresso na saída padrão, ou seja, o que você vê no terminal. Você precisa canalizar os dados para a entrada padrão do seu aplicativo, geralmente com |
.
echo 1 | your-prog-here
Talvez você deva usar espera , mas é uma nova linguagem de programação que você terá que aprender.
$ read -p 'Gimme a B: ' b
bee
$ echo $b
bee
Se eu entendi bem sua consulta, geralmente uso esse tipo de código:
_answer=''
while [ -z ${_answer} ]
do
# I check if Bash or Ksh is used
if [ "x${BASH_VERSION}" != "x" -a "x${KSH_VERSION}" = "x" ]; then
# Bash
read -n 1 -p "Your choice [1-3] : " _answer
else
# KSH
read _answer?"Your choice [1-3] : "
fi
clear
case "${_answer}" in
1) function1 ;;
2) function2 ;;
3) function3 ;;
*) _answer='' ;;
esac
done
A diferença na sintaxe de leitura, vamos apenas digitar o caractere no Bash, mas você deve digitar uma entrada no final com o KSH. Para o bash, é o -n 1
que diz para ler para aguardar apenas 1 caractere.
Não se esqueça de declarar sua função antes.
Tags linux ubuntu shell-script