Za pomocą strzałki w górę uruchom poprzednie polecenie

11

Jakiej konfiguracji muszę użyć strzałki w górę, aby uruchomić poprzednie polecenie? Na Macu mogę użyć strzałki w górę, aby ponownie uruchomić polecenie, które właśnie uruchomiłem, ale wydaje się, że nie działa z moją powłoką bash.

Używam wersji 8.04 (nie mogę korzystać z najnowszej dystrybucji z powodu problemów z wersją kompilatora).

DODANY

Nie zmieniłem niczego, ponieważ jest to nowa instalacja z VMWare Fusion na Macu.

prosseek
źródło
3
W domyślnej konfiguracji strzałka w górę działa idealnie: czy coś zmodyfikowałeś?
enzotib
jak @enzotib mówi, że bash zrobi to domyślnie, ale niektóre inne, np. sh, nie zrobią tego!
Rory Alsop,

Odpowiedzi:

10

Upewnij się, że Twoja historia jest włączona. Możesz sprawdzić bieżący status, uruchamiając:

set -o

Dane wyjściowe powinny zawierać (zwróć uwagę na history onwiersz):

histexpand      on
history         on
ignoreeof       off

Jeśli to nie jest włączone, musisz uruchomić set -o history. Aby ta zmiana była trwała, musisz dołączyć ją do ~/.bashrc:

set -o history

Jeśli chcesz uruchomić poprzednie polecenie, możesz również uruchomić następne polecenie:

!!

Ze strony podręcznika Bash :

Event Designators
   An event designator is a reference to a command line entry in the history list.

   !      Start a history substitution, except when followed by a blank, newline,
          carriage return, = or ( (when the extglob shell option  is
          enabled using the shopt builtin).
   !n     Refer to command line n.
   !-n    Refer to the current command line minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
   !string
          Refer to the most recent command starting with string.
   !?string[?]
          Refer to the most recent command containing string.  The trailing ? 
          may be omitted if string is followed immediately by a newline.
   ^string1^string2^
          Quick  substitution.  Repeat the last command, replacing string1 with
          string2.  Equivalent to ``!!:s/string1/string2/'' (see Modifiers below).
   !#     The entire command line typed so far.

Jeśli korzystasz z Bash, możesz również używać domyślnych skrótów do przeglądania historii:

  • Ctrl+ P: Poprzednie polecenie
  • Ctrl+ N: Następne polecenie

    Polecenia do manipulowania historią previous-history (Cp) Pobierz poprzednie polecenie z listy historii, cofając się na liście. next-history (Cn) Pobierz następne polecenie z listy historii, przechodząc do przodu na liście.

Lekensteyn
źródło
1
Sprawdziłem, czy konfiguracja jest prawidłowa, ale klawisz strzałki w górę nie działa. Jednak mogę użyć Ctrl-P / N, aby uzyskać ten sam wynik. Dzięki.
prosseek 11.04.11
@prosseek W takim przypadku zmieniłeś się /etc/inputrclub ~/.inputrc? Jaką sekwencję zmiany znaczenia tworzy strzałka w górę i w dół w używanym terminalu? Aby to sprawdzić, biegnij cat, a następnie po pustej linii, uderz w górę i w dół, a następnie Ctrl + C, aby wyjść z kota. Tutaj produkuje ^[[A^[[B.
geirha
@geirha: Nie mam pliku ~ / .inputrc i nie zmieniłem niczego / etc / inputrc. A jeśli chodzi o sekwencję ucieczki, nic nie widziałem na ekranie.
prosseek 11.04.11
@prosseek Wygląda na to, że klawisze strzałek nigdy nie docierają do terminala. Być może interfejs VMWare je odfiltrowuje lub coś w tym rodzaju.
geirha
14

Upewnij się, że faktycznie używasz bash. Często gotcha polega na tworzeniu nowego użytkownika za pomocą aplikacji lub useraddzamiast adduserUżytkownicy i grupy (GUI). W przypadku tego pierwszego domyślnym zestawem powłok jest /bin/sh. Uruchom chsh( ch ange sh ell), aby upewnić się, że jest ustawiony na /bin/bash.

geirha
źródło
1

W terminalu wpisz:

gedit  ~/.inputrc

Następnie skopiuj wklej i zapisz:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

Odtąd w terminalu możesz wyszukiwać przyrostowo. Aby znaleźć poprzednie polecenie, wystarczy wpisać powiedz pierwsze dwie lub trzy litery, a strzałka w górę zabierze Cię tam szybko.

Shailesh Singh
źródło