Achei este comando útil bind -x '"\C-r"':reset
para 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:
- Como posso consertar isso?
- O que
warning: line editing not enabled
significa?
Responder1
Você precisa obter esse script. Faça . ./bind
ou source ./bind
torne 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 bind
nesse 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 bind
requer um TTY.
Envolva seus bind
comandos 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