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

21

Encontrei este comando útil bind -x '"\C-r"':resetpara limpar o terminal, mas queria criar 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 isso ?
Alfred
fonte
Corrigi isso já usando echo -e '\0033\0143'graças a superuser.com/questions/122911/bash-reset-and-clear-commands/… , mas ainda gostaria de saber o que esse erro significa e como corrigi-lo. Muito Obrigado.
Alfred
@ esquilo obrigado por boas melhorias. Você também sabe responder à minha pergunta: P?
Alfred
4
Apenas para o registro (porque isso realmente não foi respondido): você obtém "edição de linha não ativada", porque no bash gerado quando você invoca seu script, ele simplesmente não está ativado e você precisa fazer isso sozinho, .eg inserindo um set -o emacsou set -o viem seu script (antes bind, é claro).
Elmar Zander

Respostas:

10

Você precisa obter esse script. Faça . ./bindou source ./bindpara ativar essa ligação de chave na sessão atual.

Ao executá-lo normalmente, ele não possui um terminal e, portanto, fornece essa mensagem de erro. Além disso, se funcionasse, estaria ativo apenas pela duração do script.

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

Pausado até novo aviso.
fonte
1. Eu sei sobre a persistência. 2. Seu exemplo funciona, mas adiciona complexidade ao comando em execução (na minha opinião). Acho que agora sei disso, mas gostaria de ter um arquivo bash simples que possa ser executado sem isso source.
Alfred
2
@alfredwesterveld: Se você não deseja que a ligação seja carregada toda vez que iniciar um shell, mas deseja ativá-la a qualquer momento sem precisar usar sourceou dot ( .), adicione uma função ao seu ~/.bashrc: rbind () { bind -x '"\C-r"':reset; }então você pode digitar rbindpor como um comando e a ligação será ativada.
Pausado até novo aviso.
9

Eu tinha uma mensagem semelhante, mas a minha era de um script sendo executado fora de um shell interativo (login); era um script de shell sendo executado por 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 ativada, ou seja, se for um shell interativo.

Richard Wiseman
fonte