Робота з історією команд bash

Налаштування розміру історії

Кількість команд, що зберігаються, визначається двома змінними: HISTSIZE і HISTFILESIZE . Перша визначає кількість команд, які у пам'яті, друга — у файлі. Їх доречно встановлювати в

/.bachrc. Такі значення, мені видаються оптимальними:

Налаштування способу збереження

За замовчуванням кожен екземпляр bash переписує історію. Тобто якщо ви запустите два термінали, щось у них зробите, а потім закриєте, то історія збережеться лише від останнього закритого. (Вона затре історію першого закритого.) Це дуже незручно і легко виправляється такою командою:

яку теж доречно написати в

П'ять останніх команд:

У поєднанні з grep:

Але це все лише приказка.

Виконання команд з історії за номером

Знак оклику виконує команду з цим номером. Приклад:

Як видно з останньої команди, підстановка зі знаком оклику може бути частиною іншої команди. Вона може бути використана в пайпі або іншому контексті. Приклади:

Номер може бути відносним, з кінця: !-2. Спеціальне скорочення!! - Остання команда.

Пересування з історії

По історії можна рухатися кнопками-стрілками. Але іноді бувають ситуації, коли ці клавіші недоступні, працюють не правильно або просто відсутні (у мене таке було, коли я підключався якимсь ssh-клієнтом з iPad). На цей випадок корисно знати, що промотування працює по Ctrl-p і Ctrl-n.

Пошук з історії

Режим пошук включається за Ctrl-r. Для пошуку наступного збігу потрібно повторно натиснути Ctrl-r. Для пересування збігами в іншу строну є поєднання клавіш Ctrl-s .

Проблема в тому, що Ctrl-s у більшості терміналівпризводить до засинання. Щоб вийти зі сну, натисніть Ctrl-q. Щоб вимкнути засинання, є команда:

Пошук з історії на початку команди

Bash (а точніше readline) підтримує дуже зручний стиль пошуку - за першими символами команди. На жаль, за умовчанням цей механізм недоступний. Щоб його увімкнути, треба написати в

/.inputrc щось таке:

Тепер ви можете набрати початок команди та натиснути Shift-. І для вас буде знайдено останню команду з історії з таким самим початком. Стрілки із клавішею Shift тепер дозволяють рухатися за збігами.

Звичайно, можна налаштувати будь-які інші кнопки.

Підстановки та зміни команд

Ви вже бачили три найпростіші підстановки:

  • !! - остання команда
  • !n - n-на в історії команда (з номером n)
  • !-n - n-на з кінця команда

Після знака оклику можна вказувати підрядок-початок команди.

!ls - остання команда ls (з усіма аргументами).

Можна вказувати підрядок для пошуку:

!?encoder? остання команда з підстрокою encoder.

Операції з окремими словами

Усі слова (параметри розділені пробілами) доступні через модифікатор: (двокрапка). Приклад:

Для цього випадку: коли ми оперуємо саме з останньою командою, можна опускати один знак оклику і двокрапка:

Є й звичні скорочення: перший аргумент — ^, останній — $, усі — *. Маються на увазі саме параметри команди. Без урахування самої команди.

Маніпуляції з шляхами та іменами файлів

Наступний рівень модифікаторів дозволяє мінімально керувати іменами файлів.

Модифікатор :t надає доступ до імені файлу. Ця зручно скажемо у такому сценарії роботи:

Ви звертаєтеся до якогось файлу, вказуючи повнийшлях:

Потім переходьте до директорії з цим файлом

Виконуєте якісь команди, а потім вирішуєте відредагувати файл. Тоді ви можете написати так:

Тобто ви знаходите в історію останню команду cat (! cat), берете її останній аргумент: $, а від нього залишаєте тільки ім'я файлу: t.

Остання команда перейде до директорії /etc.