Warnung: Zeilenbearbeitung nicht aktiviert

Warnung: Zeilenbearbeitung nicht aktiviert

Ich fand diesen Befehl hilfreich, bind -x '"\C-r"':resetum das Terminal zu löschen, wollte aber ein einfaches Bash-Skript erstellen:

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

Ausgabe:

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

Kann mir das bitte jemand erklären:

  1. Wie kann ich das beheben?
  2. Was warning: line editing not enabledbedeutet?

Antwort1

Sie müssen dieses Skript als Quelle verwenden. Verwenden Sie . ./bindoder , source ./bindum die Tastenkombination in der aktuellen Sitzung zu aktivieren.

Wenn Sie es normal ausführen, gibt es kein Terminal, sodass Sie diese Fehlermeldung erhalten. Und wenn es funktionieren würde, wäre es nur für die Dauer des Skripts aktiv.

Wenn Sie möchten, dass diese Tastenkombination dauerhaft ist, fügen Sie diesen Befehl zu Ihrem hinzu ~/.bashrc.

Antwort2

Ich hatte eine ähnliche Meldung, aber meine stammte von einem Skript, das außerhalb einer interaktiven (Anmelde-)Shell ausgeführt wurde; es war ein Shell-Skript, das über ein CGI-Skript ausgeführt wurde. Meine Meldung war:

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

und obwohl es nicht wirklich in Zeile 4 stand, bindwar das Einzige in der Datei:

bind 'set completion-ignore-case on'

was natürlich nur Sinn macht, wenn die Zeilenbearbeitung aktiviert ist, es sich also um eine interaktive Shell handelt.

Antwort3

Ich versuche nur, die akzeptierte Antwort zu verbessern.

Sie erhalten " line editing not enabled" beim Ausführen in einer nicht interaktiven Shell, weil bindein TTY erforderlich ist.

Verpacken Sie Ihre bindBefehle in eine Prüfung wie diese:

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

Antwort4

Ich würde stattdessen testen, ob die Shell interaktiv ist.
Hier ist ein Codeblock, den ich in der Bashrc-Datei meiner Distribution gefunden habe

# 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

verwandte Informationen