Wymiana terminala! po którym następuje liczba z poleceniem

12

Jestem bardzo zdezorientowany co do mojej sesji terminala ubuntu, wydaje się, że zastępuje sekcje w poleceniach, które rozpoczynają się !od liczby z pozornie losowymi poleceniami. Robi to, !87zastępując go, screen -la także !88i zastępując go ls.

Wszelkie pomysły, dlaczego tak się dzieje, byłyby bardzo mile widziane.

usbpc102
źródło

Odpowiedzi:

20

To bashrozszerzenie historii, np

!87

ponownie wykonuje polecenie z linii historii 87.

Opis tej funkcji znajduje się w man bashrozdziale „ROZSZERZENIE HISTORII”:

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position 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 minus n.

Aby szybko wywołać ostatnie polecenie, zrób !-1i dla piątego ostatniego polecenia !-5. Przydatnym synonimem !-1jest !!- jeśli zadzwoniłeś np. apt install somethingI zapomniałeś sudo, po prostu wykonaj sudo !!i jesteś dobry.

Tylko ukośnik odwrotny ( \ ) i pojedyncze cudzysłowy mogą cytować znak rozwinięcia historii.

Aby uniknąć ekspansji historii, musisz uciec od wykrzyknika ukośnikiem odwrotnym ( \!) lub użyć pojedynczych cudzysłowów ( '!').

deser
źródło
3
aby przekazać litereal !swoim poleceniom i uniknąć ekspansji historii, musisz je zacytować lub uciec przed nimi: foo '!87'lub foo \!87. (podwójne cudzysłowy również spowodują rozszerzenie ich zawartości).
donkiszot