Заміна терміналу! слідом за номером із командою


12

Я дуже заплутаний у зв'язку з моїм сеансом терміналу ubuntu, він, здається, замінює розділи в командах, які починаються з !наступного числа, начебто випадкові команди. Це робиться з !87заміною на, screen -lа також з !88і заміною на ls.

Будь-які вдячності, чому це відбувається, були б дуже вдячні.


Відповіді:


20

Це bashрозширення історії, наприклад

!87

повторно виконує команду з рядка історії 87.

Опис цієї функції ви знайдете в man bashрозділі "РОЗШИРЕННЯ ІСТОРІЇ":

       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.

Отже, щоб швидко викликати останню команду, виконайте !-1і для п’ятої останньої команди !-5. Зручним синонімом !-1є !!- якщо ви зателефонували, наприклад, apt install somethingі забули sudo, просто виконайте sudo !!і ви добрі.

Лише зворотна косою червою ( \ ) та одиничні лапки можуть цитувати характер розширення історії.

Щоб уникнути розширення історії, потрібно або уникати знака оклику за допомогою зворотної косої риски ( \!) або використовувати одинарні лапки ( '!').


3
щоб передати літературу !своїм командам і уникнути розширення історії, вам потрібно буде цитувати одноразово або уникати їх: foo '!87'або foo \!87. (подвійні лапки також виконуватимуть розширення щодо їх змісту.)
кіхот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.