Ich fand diesen Befehl hilfreich, bind -x '"\C-r"':reset
um 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:
- Wie kann ich das beheben?
- Was
warning: line editing not enabled
bedeutet?
Antwort1
Sie müssen dieses Skript als Quelle verwenden. Verwenden Sie . ./bind
oder , source ./bind
um 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, bind
war 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 bind
ein TTY erforderlich ist.
Verpacken Sie Ihre bind
Befehle 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