Виберіть команди з історії bash


20

Натискання кнопки вгору стомлює, і я можу пропустити команду, яку я шукав. Тож при введенні historyв термінал мені всі команди, які я вводив раніше, індексуються до числа. Чи є спосіб, щоб я міг просто зателефонувати на номер, пов'язаний з командою?


будь-який інтерактивний варіант на даний момент? це настільки схильні до помилок
мат

Відповіді:


31

Історія баш може зробити багато корисних справ, і пошук із Strg-rцим згадуваним Террі Ван є важливим серед них. Але також можна зробити саме те, про що ви просили.

Ви можете повторити попередню команду за допомогою !!. За допомогою цього ви також можете редагувати попередню команду. Наприклад, ви забули отримати кореневі привілеї для команди

apt-get install a-long-list-of-packages

вам не доведеться вводити все це знову. Замість цього просто зателефонуйте

sudo !!

Якщо ви хочете повторно виконати команду на певній позиції зі своєї історії, ви також можете використовувати !, наприклад

!3

щоб знову виконати команду в положенні 3. Будьте в курсі, що це рахується зверху. Отже, якщо ви зберігаєте 500 команд у своїй історії, це !1було б "500 команд тому". Ви також можете використовувати від’ємні числа. Наприклад

!-2

повторно виконає другу останню команду.

Ви також можете повторно виконати останню команду, розпочату з типу "рядок"

!apt-

який би повторно зробив останній рядок, що починався з "apt-". Якщо ви хочете останню команду, де рядок з'явився в будь-якому місці рядка, ви можете використовувати щось на зразок

!?pt-ge

Є ще цікаві речі, якими може займатися історія баш. Тільки щоб створити враження про широкий спектр можливостей, ви можете спеціально отримати доступ до параметра команди з історії. Так

!-5:3:p

буде надрукувати третій параметр до п'ятого з останньої команди.

EDIT: Що стосується коментаря Руді нижче, стандартні параметри цього розширення історії башів справді виконуються безпосередньо. Це, ймовірно , краще за все можна описати таким чином: Виклик , як !-3буде замінена оболонкою з третьої останньою командою з історії та потім ваш вхід (з заміною) виконується. Отже, якщо ви набираєте !-3і натискаєте, ENTERі третя остання команда була ls ~, це фактично те саме, що якби ви ls ~знову ввели і натиснули ENTER«самостійно».

Якщо ви цього не хочете, ви можете встановити параметр оболонки histverify. Для налаштування та зняття параметрів оболонки ви можете прочитати shoptкоманду. З histverifyнабором виклик, як-от !-3записує лише заміну з вашої історії у ваш командний рядок, але не виконує її безпосередньо. Ви повинні, так би мовити, натискати на найважливіше ENTER- або утримайтеся від цього, якщо захочете.


Тож !це проклято небезпечно ... Я хотів би знати, що !-4саме робив перед тим, як запустити його. Або це вам показує спочатку? Класна резюме!
Rudie

1
@Rudie Це гарний момент, я оновив свою відповідь. Функції історії здебільшого призначені для прискорення вашої роботи та економії натискань на клавіші. Так стандарт "Ти справді, справді це маєш на увазі?" хоча б частково перемогло б цю мету. І хоча ви могли, як правило, ви не будете викликати таку команду "далеко назад", як !-238. Не повинно бути занадто важким запам'ятати свою другу останню, третю останню, можливо, останню команду;) Як часто з Linux (і, власне, з обчисленнями взагалі), очікується, що ви знаєте, що ви робите. І якщо ви справді хочете отримати додаткову мережу безпеки, це одна shopt;)
Геннінг Кокербек,

16

Так, є. Наприклад, якщо ви хочете виконати команду, яка поруч має номер 1234, зробіть:

!1234

Інші корисні речі:

  • Якщо ви хочете виконати останню запущену команду, виконайте:

    !!
  • Якщо ви хочете виконати останню lsзапущену команду, виконайте:

    !ls
  • Якщо ви щойно бігли ls /some/long/pathі хочете cdдо нього, зробіть:

    cd !$

Для отримання додаткової інформації:



3

Якщо ви знайшли номер історії команди і хочете виконати її ще раз, введіть !наступний номер, наприклад, !1234і натисніть Enter. Це частина розширення історії ; ви можете встановити на нього модифікатори .

Якщо ви хочете відредагувати команду перед її запуском, fc 1234викликається зовнішній редактор.

Але як вже згадував Террі Ванг , зазвичай існують більш швидкі способи розміщення команди в історії, ніж визначення її номера історії, включаючи Ctrl+ Rдля виклику поступового пошуку (натисніть, Enterколи ви знайшли команду, яку хочете виконати), або fc PREFIXвиконати попередню команда, що починається з PREFIX.


1

historyКоманда покаже всі команди і пов'язаний з ними номер. Якщо ви хочете просто зробити швидку перевірку перед виконанням командного рядка № 135, ви можете ввести:

echo !135

Це покаже вам, що буде виконано.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.