Zsh read
почему-то повторяет ^M
, а не принимает их как <Enter>
нажатия клавиш. (Если -d
установлено, то они распознаются как <Enter>
's, но все еще отражаются.) Он также не поддерживает основы, такие как клавиша возврата.
Я могу обойти это путем взлома / бега bash
,
> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a
eat cake
но мне интересно, есть ли более чистый путь.
zsh
удается подтвердить при новой установке 4.3.10;% read a
отлично работает здесь.read
работает на машинах Linux.Ответы:
Для удобного ввода строки текста под zsh используйте
vared
. Использованиеvared
вместоread
вызывает zle , что эквивалентно передаче-e
в bash для вызова readline.Поведение, которое вы описываете с помощью plain,
read
похоже на неправильно настроенный терминал, а не на проблему с оболочкой. Запустите,stty -a
чтобы показать настройки вашего терминала, и убедитесь, чтоeol
он установлен^M
иerase
настроен на то, что Backspaceотправляет ваш ключ. В зависимости от операционной системы и того, как она настроена и на терминале, Backspaceотправляет либо^H
или^?
. Настройка backspace обычно происходит неправильно из-за некоторого файла конфигурации, который пытается установить его вручную, поэтому первое, что вы должны сделать, это отследить и удалить любую такую неправильную конфигурацию. Если вы не нашли ничего, просмотрите настройки вашего эмулятора терминала, чтобы убедиться, что он не установлен в какой-либо исторический режим совместимости. Если ничего не помогает, добавьте что-то вроде этого в свой~/.zshrc
:источник
vared
встроенном. Оказывается,zshzle
справочная страница определенно стоит хотя бы пролистать.