Korzystam z wersji bash 4.3.11 (1) i mam zainstalowaną następującą wtyczkę historii (przez .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'
Kiedy loguję się do sesji interaktywnej, wszystko jest w porządku, ale kiedy uruchamiam ssh host 'ls -als'
na przykład polecenia zdalne , widzę następujące dane wyjściowe:
: 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
Kiedy modyfikuję wtyczkę historii przy echo -e '\0033\0143'
każdym wywołaniu powiązania, nie otrzymuję już ostrzeżeń, ale moja konsola jest czyszczona. Nie jest to duża wada, ale byłoby miło poznać bardziej przejrzysty sposób na stłumienie tego dla zdalnych poleceń.
# 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'
Sesja interaktywna nie wystarczy
bind
do pracy. Na przykład powłoka emacs zapewnia interaktywną sesję, która pozytywnie przechodziif [ -t 1 ]
test, ale nie ma edycji linii, więc jakiekolwiekbind
s~/.bashrc
wygenerują ostrzeżenia. Zamiast tego możesz sprawdzić, czy edycja linii jest włączona, wykonując coś takiego (czy istnieje prostszy / lepszy sposób?):źródło
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Umieść polecenia bind w instrukcji „if”, która sprawdza, czy sesja bash pozwala na edycję linii:
źródło
Jeśli nie ma edycji linii,
bind
same te polecenia są nieszkodliwe. Pomiń ostrzeżenia:To jest trochę nieeleganckie, ale powinno działać. Inne odpowiedzi nie zgadzają się co do najlepszego / wystarczającego testu. Moje podejście to obchodzi. Jednak nie skaluje się dobrze. Same dwa polecenia nie powinny mieć wielkiego znaczenia; ale gdybyś miał więcej, jak dziesiątki, wówczas poprawne warunki byłyby prawdopodobnie lepsze.
źródło