LINUX.ORG.RU

Создать интерактивную оболочку команд

 , ,


0

1

Хочу сделать интерактивный клиент, для синтезатора речи например.
sayctl.sh

#!/bin/bash

SCRIPTS="/home/$USER/scripts"

echo "это интерактивная консоль синтезатора речи"
echo " вводите предложения построчно"

  volume=1;
  b=true;

while [ $b ] ; do
        read text ;

        if [ "$text" ==  "stop" ] ;  then
                $b = false
                break

        elif [ "$text" ==  "setvolume" ] ; then
                read -p "введите громкость 0-1" volume
        else
                (IFS="_" ; 2>/dev/null ; $SCRIPTS/say.sh $text $volume 2> /dev/null )

        fi
done
у меня есть вот такой состряпанный скриптик
say.sh переопределяет синтезатор.
 #!/bin/bash

if [ "$#" -eq "1" ] ; then

 echo "$1" | RHVoice  | aplay

elif [ "$#" -eq "2" ] ; then

 echo "$1" | RHVoice -v $2 -W Aleksandr | aplay

else

 echo "первым параметром идет текст разговора"
 echo "вторым опционально громкость"

fi

Но мне не хватает важнейшей фичи таких консолей. Истории команд с переключением стрелками курсора.

Вопрос как минимальными усилиями это сделать.

★★★

есть конструкция select. Если не устраивает, перепиши на while+case. Зачем велосипедить, если алгоритмы уже есть?

По поводу истории команд: в скриптах эта штука не работает по определению. Если надо - делай сам.

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 2)
Ответ на: комментарий от ziemin

По поводу истории команд: в скриптах эта штука не работает по определению.

Работает:

#!/bin/sh

HISTFILE="custom_history_file.log"

while true ; do
 set -o history
 read -e A
echo "$A" >> "$HISTFILE"
echo "$A"

done

Внимание с пробелами перед set и read. Проконтролировать, чтобы в HISTCONTROL было ignorespace или ignoreboth (обычно в профайле). (По идее это можно обойти, но мне лень).

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Внимание с пробелами перед set и read. Проконтролировать, чтобы в HISTCONTROL было ignorespace или ignoreboth (обычно в профайле). (По идее это можно обойти, но мне лень)

Это называется работает? Что же тогда не работает?

ziemin ★★
()
Ответ на: комментарий от ziemin

Это называется работает? Что же тогда не работает?

Йопт! Если этого не будет, просто в историю добавится 2 строчки мусора. В остальном работает! Да и то, несложно установить это в самом скрипте. Или мне за тебя всю грязную работу делать?

Kroz ★★★★★
()

вариант №1

У readline где-то в /usr/share/ должна быть кучка примеров. Думаю найдешь, что нужно.

вариант №2

rlwrap

sergej ★★★★★
()
Ответ на: комментарий от sergej

Благодарю, явно то что нужно. Разберусь на досуге.

LiBer ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.