Warnung: Die Zeilenbearbeitung ist nicht aktiviert

21

Ich fand diesen hilfreichen Befehl bind -x '"\C-r"':resetzum Löschen des Terminals, 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

Könnte jemand bitte erklären:

  1. Wie kann ich das beheben?
  2. Was warning: line editing not enabledbedeutet
Alfred
quelle
Ich habe dies bereits mithilfe echo -e '\0033\0143'von " superuser.com/questions/122911/bash-reset-and-clear-commands/…" behoben , möchte jedoch weiterhin wissen, was dieser Fehler bedeutet und wie dies behoben werden kann . Danke vielmals.
Alfred
@squircle danke für gute Verbesserungen. Könnten Sie auch Antwort auf meine Frage wissen: P?
Alfred
4
Nur zur Veranschaulichung (weil dies nicht wirklich beantwortet wurde): Sie erhalten "Zeilenbearbeitung nicht aktiviert", weil in der Bash, die beim Aufrufen Ihres Skripts erzeugt wird, es einfach nicht aktiviert ist und Sie es selbst tun müssen, zB durch Einfügen eines set -o emacsoder set -o viin Ihr Skript ( bindnatürlich vor dem).
Elmar Zander

Antworten:

10

Sie müssen dieses Skript als Quelle angeben. Führen Sie . ./bindoder aus source ./bind, um diese Schlüsselbindung in der aktuellen Sitzung zu aktivieren.

Wenn Sie es normal ausführen, hat es kein Terminal, sodass Ihnen diese Fehlermeldung angezeigt wird. Wenn es funktionieren würde, wäre es nur für die Dauer des Skripts aktiv.

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

Dennis Williamson
quelle
1. Ich weiß um die Ausdauer. 2. Ihr Beispiel funktioniert, fügt aber (meiner Meinung nach) den Befehl zum Ausführen von Komplexität hinzu. Ich glaube, ich weiß das jetzt, aber ich hätte gerne eine einfache Bash-Datei, die ich ohne diese ausführen kann source.
Alfred
2
@alfredwesterveld: Wenn Sie nicht möchten, dass die Bindung jedes Mal geladen wird, wenn Sie eine Shell starten, aber Sie möchten, dass sie jederzeit aktiviert werden kann, ohne dass Sie sourceoder dot ( .) verwenden müssen, fügen Sie Ihrer Funktion Folgendes hinzu ~/.bashrc: rbind () { bind -x '"\C-r"':reset; }Sie können eingeben rbinddurch selbst als Befehl und die Bindung wird aktiviert.
Dennis Williamson
8

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

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

und obwohl es eigentlich nicht in Zeile 4 war, war das einzige bindin dieser Datei:

bind 'set completion-ignore-case on'

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

Richard Wiseman
quelle