предупреждение: редактирование строк не включено

предупреждение: редактирование строк не включено

Я нашел эту команду полезной 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

Может ли кто-нибудь объяснить:

  1. Как я могу это исправить?
  2. Что 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

Связанный контент