ostrzeżenie: edycja linii nie jest włączona

21

Znalazłem to pomocne polecenie, bind -x '"\C-r"':resetaby wyczyścić terminal, ale chciałem stworzyć prosty skrypt bash:

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

wynik:

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

Czy ktoś mógłby wyjaśnić:

  1. Jak mogę to naprawić?
  2. Co warning: line editing not enabledznaczy
Alfred
źródło
Naprawiłem to już przy użyciu echo -e '\0033\0143'dzięki superuser.com/questions/122911/bash-reset-and-clear-commands/... , ale nadal chciałbym wiedzieć, co ten błąd oznacza i jak to naprawić. Wielkie dzięki.
Alfred
@squircle dzięki za dobre ulepszenia. Czy znasz również odpowiedź na moje pytanie: P?
Alfred
4
Dla przypomnienia (bo tak naprawdę nie ma odpowiedzi): dostajesz „edytowanie linii nie włączone”, ponieważ w bash, który pojawia się po wywołaniu skryptu, po prostu nie jest włączony i musisz to zrobić sam, .eg przez wstawianie set -o emacslub set -o vido skryptu (zanim bind, oczywiście).
Elmar Zander

Odpowiedzi:

10

Musisz zdobyć ten skrypt. Wykonaj . ./bindlub, source ./bindaby powiązanie klucza było aktywne w bieżącej sesji.

Działając normalnie, nie ma terminala, więc wyświetla ten komunikat o błędzie. Ponadto, jeśli miałby działać, byłby aktywny tylko na czas trwania skryptu.

Jeśli chcesz, aby przypisanie klawiszy było trwałe, dodaj to polecenie do swojego ~/.bashrc.

Wstrzymano do odwołania.
źródło
1. Wiem o wytrwałości. 2. Twój przykład działa, ale dodaje złożoność uruchomionego polecenia (moim zdaniem). Chyba już o tym wiem, ale chciałbym mieć prosty plik bash, który mogę uruchomić bez tego source.
Alfred
2
@alfredwesterveld: Jeśli nie chcesz wiązanie ładowany przy każdym uruchomieniu powłoki, ale chcesz, aby móc go aktywować w dowolnym momencie, bez konieczności użycia sourcelub kropka ( .), dodać funkcję do listy ~/.bashrc: rbind () { bind -x '"\C-r"':reset; }wtedy można wprowadzić rbindprzez jako polecenie, a wiązanie zostanie aktywowane.
Wstrzymano do odwołania.
9

Miałem podobną wiadomość, ale moja pochodziła ze skryptu uruchamianego poza interaktywną powłoką (login); był to skrypt powłoki uruchamiany za pomocą skryptu CGI. Moja wiadomość to:

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

i chociaż nie było tak naprawdę w linii 4, jedynym bindw tym pliku było:

bind 'set completion-ignore-case on'

co oczywiście ma sens tylko wtedy, gdy włączona jest edycja linii, tj. jeśli jest to interaktywna powłoka.

Richard Wiseman
źródło