Я использую bash 4.3.11 (1) и у меня установлен следующий плагин истории (через .bash_it ):
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
bind '"^[[B":history-search-forward'
Когда я вхожу в интерактивный сеанс, все хорошо, но когда я запускаю удаленные команды, ssh host 'ls -als'
например, через , я вижу следующий вывод:
: ssh host 'ls -als'
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 3: bind: warning: line editing not enabled
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 4: bind: warning: line editing not enabled
Когда я изменяю плагин истории echo -e '\0033\0143'
после каждого связывающего вызова, я больше не получаю предупреждения, но моя консоль очищается. Не большой недостаток, но было бы неплохо знать более чистый способ подавления этого для удаленных команд.
# Works, but annoyingly clears console
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
echo -e '\0033\0143'
bind '"^[[B":history-search-forward'
echo -e '\0033\0143'
bind
Для работы недостаточно иметь интерактивный сеанс . Например, оболочка emacs предоставляет интерактивный сеанс, который проходитif [ -t 1 ]
тест, но у него нет редактирования строки, поэтому любыеbind
ваши сообщения~/.bashrc
будут генерировать предупреждения. Вместо этого вы можете проверить, включено ли редактирование строки, выполнив что-то вроде этого (есть ли более простой / лучший способ?):источник
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Поместите команды связывания в оператор if, который проверяет, позволяет ли сеанс bash редактировать строки:
источник
Если нет редактирования строки,
bind
сами эти команды безвредны. Подавить предупреждения:Это несколько не элегантно, все же это должно работать. Другие ответы не согласны с лучшим / достаточным тестом. Мой подход обходит это. Это не хорошо масштабируется, хотя. Две эти команды не должны иметь большого значения; но если бы у вас было больше, например, десятки, то правильное условие, вероятно, было бы лучше.
источник