Как представить пользователю редактируемый ввод с помощью BASH и ZSH?

Мне нужно принять пользовательский ввод в сценарии оболочки, который может работать как в BASH, так и в ZSH. Я привык использовать readline в других языках, но это не кажется приемлемым вариантом в сценариях оболочки.

Пример подсказки может быть:

Please enter the value> 1234_

Как я могу предоставить пользователю редактируемый ввод со значением по умолчанию, которое можно отредактировать (отменить), которое совместимо с обеими оболочками?


person ylluminate    schedule 13.06.2019    source источник
comment
С Баш: read -e -p 'Please enter the value> ' -i '1234'   -  person Cyrus    schedule 13.06.2019
comment
Для zsh вы, вероятно, захотите взглянуть на vared встроенный модуль ZLE. . Это предположение, i=1234; vared -p 'Please enter the value> ' i   -  person Toby Speight    schedule 13.06.2019
comment
Нет ничего, что будет работать в обеих оболочках, потому что каждая оболочка использует свой строковый редактор (Readline для bash, ZLE для zsh).   -  person chepner    schedule 13.06.2019
comment
@Cyrus Спасибо! Вы сделали мой день :-) Вы также можете включить переменную (например, с именем answer), в которой вы храните пользовательский ввод: read -e -p 'Please enter the value> ' -i '1234' answer приводит к чему-то вроде: Please enter the value> 1236. Показать отредактированный пользовательский ввод, например: echo "$answer" 1236   -  person Bernie Reiter    schedule 16.07.2020
comment
@BernieReiter: Это, конечно, возможно, но не обязательно. Если переменная не указана, read использует переменную REPLY. Код, конечно, легче понять, если вы укажете переменную.   -  person Cyrus    schedule 16.07.2020
comment
@Cyrus Еще раз спасибо! Узнавайте каждый день что-то новое и полезное :-)   -  person Bernie Reiter    schedule 16.07.2020


Ответы (1)


Если я не ошибся... В смысле функционала "Backspace", чтобы стереть последние символы и добавить какие-то новые.. Это работает в обеих оболочках при простом "чтении" в скрипте.

echo -n "Enter value > "
read v
echo $v

Если у вас есть другие вопросы, не могли бы вы перефразировать, чтобы сделать ваш вопрос более ясным? Что вы используете (пример кода). Что именно вы выполняете в плане редактирования (только БС или вы имеете в виду команды редактирования строки CTRL-A и т.д.) Каков результат/ошибка, что вы хотите исправить. Спасибо.

person ennox    schedule 13.06.2019
comment
Я вообще не знаю zsh, но с точки зрения Bash: echo -n не переносим; read, отличное от начала строки, запутает представление readline о позиции столбца. Вот почему read имеет опцию -p. - person Toby Speight; 13.06.2019
comment
Это не обеспечивает начальное значение, которое является основным вопросом вопроса. - person Toby Speight; 13.06.2019