Робота з історією команд 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.