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. Или что-то еще происходит, что ускользает от меня?