Ich verwende bash 4.3.11 (1) und habe das folgende History-Plugin installiert (via .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'
Wenn ich mich bei einer interaktiven Sitzung anmelde, ist alles in Ordnung, aber wenn ich ssh host 'ls -als'
beispielsweise Remotebefehle über ausführe , wird die folgende Ausgabe angezeigt:
: 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
Wenn ich das Verlaufs-Plugin echo -e '\0033\0143'
nach jedem Bind-Aufruf ändere, werden keine Warnungen mehr angezeigt, aber meine Konsole wird gelöscht. Kein großer Nachteil, aber es wäre schön, einen saubereren Weg zu kennen, um dies für Remote-Befehle zu unterdrücken.
# 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'
Eine interaktive Sitzung reicht nicht aus, um
bind
zu arbeiten. Zum Beispiel bietet die emacs-Shell eine interaktive Sitzung, die denif [ -t 1 ]
Test besteht, aber keine Zeilenbearbeitung hat, sodass allebind
s in Ihnen~/.bashrc
die Warnungen generieren. Stattdessen können Sie folgendermaßen überprüfen, ob die Zeilenbearbeitung aktiviert ist (gibt es einen einfacheren / besseren Weg?):quelle
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Fügen Sie die Bindebefehle in eine 'if'-Anweisung ein, die prüft, ob die Bash-Sitzung die Bearbeitung von Zeilen zulässt:
quelle
Wenn keine Zeilenbearbeitung erfolgt, sind diese
bind
Befehle selbst harmlos. Unterdrücken Sie die Warnungen:Das ist etwas unelegant, sollte aber trotzdem funktionieren. Andere Antworten stimmen nicht mit dem besten / ausreichenden Test überein. Mein Ansatz umgeht dies. Es ist jedoch nicht gut skalierbar. Die beiden Befehle alleine sollten keinen großen Unterschied machen. aber wenn Sie mehr hätten, wie Dutzende, dann wäre eine richtige Bedingung wahrscheinlich besser.
quelle