Я нашел эту команду полезной bind -x '"\C-r"':reset
для очистки терминала, но мне хотелось создать простой bash-скрипт:
#!/bin/bash
bind -x '"\C-r"':reset
выход:
alfred@alfred-laptop:~/bash$ ./bind
./bind: line 2: bind: warning: line editing not enabled
Может ли кто-нибудь объяснить:
- Как я могу это исправить?
- Что
warning: line editing not enabled
значит?
решение1
Вам нужно получить этот скрипт. Сделайте . ./bind
или , source ./bind
чтобы сделать эту привязку клавиш активной в текущем сеансе.
Запуская его в обычном режиме, у него нет терминала, поэтому он выдает вам это сообщение об ошибке. Кроме того, если бы он работал, он был бы активен только на время выполнения скрипта.
Если вы хотите, чтобы эта привязка клавиш была постоянной, добавьте эту команду в свой ~/.bashrc
.
решение2
У меня было похожее сообщение, но мое было от скрипта, запущенного вне интерактивной (входной) оболочки; это был скрипт оболочки, запущенный через скрипт CGI. Мое сообщение было:
/home/richard/.bash_profile: line 4: bind: warning: line editing not enabled
bind
и хотя на самом деле его не было в строке 4, в этом файле было только :
bind 'set completion-ignore-case on'
что, конечно, имеет смысл только в том случае, если включено редактирование строк, т. е. если это интерактивная оболочка.
решение3
Просто пытаюсь улучшить принятый ответ.
Вы получите " line editing not enabled
" при запуске в неинтерактивной оболочке, поскольку bind
требуется TTY.
Оберните свои bind
команды в такую проверку:
if [ -t 1 ]
then
# standard output is a TTY
bind -x '"\C-r"':reset
fi
решение4
Я бы проверил, является ли оболочка интерактивной.
Вот блок кода, который я нашел в файле bashrc моего дистрибутива
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
# if [[ $- != *i* ]] ; then
# # Shell is non-interactive. Be done now!
# return
# fi