Advertencia: edición de línea no habilitada

Advertencia: edición de línea no habilitada

Encontré este comando útil bind -x '"\C-r"':resetpara borrar la terminal, pero quería crear un script bash simple:

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

producción:

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

¿Alguien podría explicarme?

  1. ¿Cómo puedo arreglar esto?
  2. ¿Que warning: line editing not enabledsignifica?

Respuesta1

Necesitas obtener ese script. Haga . ./bindo source ./bindpara activar esa combinación de teclas en la sesión actual.

Ejecutándolo normalmente, no tiene terminal por lo que te da ese mensaje de error. Además, si funcionara, solo estaría activo mientras dure el script.

Si desea que esa combinación de teclas sea persistente, agregue ese comando a su archivo ~/.bashrc.

Respuesta2

Recibí un mensaje similar, pero el mío provenía de un script que se ejecutaba fuera de un shell interactivo (inicio de sesión); era un script de shell que se ejecutaba mediante un script CGI. Mi mensaje fue:

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

y aunque en realidad no estaba en la línea 4, el único binden ese archivo era:

bind 'set completion-ignore-case on'

lo cual, por supuesto, sólo tiene sentido si la edición de líneas está habilitada, es decir, si se trata de un shell interactivo.

Respuesta3

Solo intento mejorar la respuesta aceptada.

Obtiene " line editing not enabled" cuando se ejecuta en un shell no interactivo, porque bindrequiere un TTY.

Envuelva sus bindcomandos en un cheque como este:

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

Respuesta4

En su lugar, probaría si el Shell es interactivo.
Aquí hay un bloque de código que encontré en el archivo bashrc de mi distribución.

# 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

información relacionada