aviso: edição de linha não habilitada

aviso: edição de linha não habilitada

Achei este comando útil bind -x '"\C-r"':resetpara limpar o terminal, mas queria fazer um script bash simples:

#!/bin/bash
bind -x '"\C-r"':reset

saída:

alfred@alfred-laptop:~/bash$ ./bind 
./bind: line 2: bind: warning: line editing not enabled

Alguém poderia explicar:

  1. Como posso consertar isso?
  2. O que warning: line editing not enabledsignifica?

Responder1

Você precisa obter esse script. Faça . ./bindou source ./bindtorne essa ligação de tecla ativa na sessão atual.

Executando normalmente, ele não possui terminal, então dá aquela mensagem de erro. Além disso, se funcionasse, só ficaria ativo durante o script.

Se você deseja que a combinação de teclas seja persistente, adicione esse comando ao seu arquivo ~/.bashrc.

Responder2

Recebi uma mensagem semelhante, mas a minha era de um script executado fora de um shell interativo (login); era um script de shell executado por meio de um script CGI. Minha mensagem foi:

/home/richard/.bash_profile: line 4: bind: warning: line editing not enabled

e embora não estivesse na linha 4, o único bindnesse arquivo era:

bind 'set completion-ignore-case on'

o que obviamente só faz sentido se a edição de linha estiver habilitada, ou seja, se for um shell interativo.

Responder3

Apenas tentando melhorar a resposta aceita.

Você recebe " line editing not enabled" ao executar em um shell não interativo, porque bindrequer um TTY.

Envolva seus bindcomandos em uma verificação como esta:

if [ -t 1 ]
then
    # standard output is a TTY
    bind -x '"\C-r"':reset
fi

Responder4

Eu testaria se o shell é interativo.
Aqui está um bloco de código que encontrei no arquivo bashrc da minha distribuição

# 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

informação relacionada