Estoy usando bash 4.3.11 (1) y tengo el siguiente complemento de historial instalado (a través de .bash_it ):
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
bind '"^[[B":history-search-forward'
Cuando inicio sesión en una sesión interactiva, todo está bien, pero cuando ejecuto comandos remotos a través de, ssh host 'ls -als'
por ejemplo, veo el siguiente resultado:
: ssh host 'ls -als'
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 3: bind: warning: line editing not enabled
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 4: bind: warning: line editing not enabled
Cuando modifico el complemento de historial echo -e '\0033\0143'
después de cada llamada de enlace, ya no recibo las advertencias, pero mi consola se borra. No es un gran inconveniente, pero sería bueno saber una forma más limpia de suprimir esto para los comandos remotos.
# Works, but annoyingly clears console
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
echo -e '\0033\0143'
bind '"^[[B":history-search-forward'
echo -e '\0033\0143'
Tener una sesión interactiva no es suficiente para
bind
trabajar. Por ejemplo, emacs shell proporciona una sesión interactiva que pasa laif [ -t 1 ]
prueba, pero no tiene la edición de línea, por lo que cualquierbind
s en su~/.bashrc
generará las advertencias. En cambio, puede verificar si la edición de línea está habilitada haciendo algo como esto (¿hay una manera más simple / mejor?):fuente
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Ponga los comandos de enlace en una instrucción 'if' que verifique si la sesión bash permite la edición de línea:
fuente
Si no hay edición de línea, estos
bind
comandos en sí mismos son inofensivos. Suprimir las advertencias:Esto es algo poco elegante, aún así debería funcionar. Otras respuestas no están de acuerdo con la prueba mejor / suficiente. Mi enfoque evita esto. Sin embargo, no escala bien. Los dos comandos por sí solos no deberían hacer una gran diferencia; pero si tuviera más, como docenas, entonces un condicional apropiado probablemente sería mejor.
fuente