3

У меня есть проблема в моем сценарии оболочки. Я пытаюсь контролировать установку. Во время установки есть несколько вопросов, на которые нужно ответить. Как: «Введите свой выбор [1-3]:»

Я хочу сделать что-то вроде этого:

--> 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

4 ответа4

3

echo выведет на стандартный вывод, то есть то, что вы видите в терминале. Вы должны передать данные в стандартный ввод вашего приложения, обычно с помощью | ,

echo 1 | your-prog-here

Возможно, вы должны использовать ожидаемый, но это новый язык программирования, который вам придется выучить.

1

Вы часто можете сделать это с помощью здесь документа:

cat <<EOF | ./buildgcc.sh
y
n

n
2
1
1
1
EOF

или же

./buildgcc.sh <<EOF
y
n

n
2
1
1
1
EOF
1
$ read -p 'Gimme a B: ' b
bee
$ echo $b
bee
1

Если я хорошо понял ваш запрос, я часто использую такой код:

_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

Разница в синтаксисе чтения позволяет вам вводить только символы в Bash, но вы должны вводить ввод в конце с помощью KSH. Для bash это -n 1 который говорит «читать», чтобы ждать только 1 символа.

Не забудьте объявить вашу функцию раньше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .