Назад | Перейти на главную страницу

почему bash не отображает результаты команды bind -p?

bash отказывается выдавать мне вывод 'bind -p', когда я передаю его с переключателем -c:

bash -c 'bind -p'

но он работает, чтобы набрать

bind -p

непосредственно в приглашении bash, и он работает, чтобы ввести что-то вроде

bash -c 'echo "hi"'

и zsh с радостью делает именно то, что bash отказывается делать (ну, эквивалентная команда в zsh):

zsh -c 'bindkey -L'

Что, черт возьми, происходит ???

Когда ты бежишь bash с -c вариант bash работает в неинтерактивном режиме. Судя по всему, bind builtin не генерирует вывод, когда bash находится в неинтерактивном режиме. Вы можете заставить bash в интерактивный режим, задав -i вариант. Для меня работает следующее:

bash -i -c 'bind -p'

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

Если я напечатаю

bash -c "set -o emacs && bind -p"

затем он дает результат команды bind. Кажется, что по какой-то причине в bash нет карты ключей по умолчанию, что действительно странно.

(У меня было что-то, полученное из моего .bash_profile, в котором была ошибка - что-то, что отлично работало в zsh, но которое bash подавляло (очевидно, bash не позволяет использовать 'else' в скриптах!?) - и поэтому я просто отключил это, полагая, что настройки по умолчанию в любом случае будут чище.)

Почти немыслимо, чтобы bash по умолчанию не использовал раскладку клавиатуры vi или emacs. Или что-то еще происходит, что ускользает от меня?