Rheinwerk Computing Linux - 7 Оболонка
7.11 Ефективна робота з Bash
Цей підрозділ має на меті показати вам, як ви можете полегшити свою щоденну роботу з bash (Bourne-Again-Shell).

7.11.1 Історія команд
Ви напевно повинні знати найпростішу функцію bash, яка виконує для вас деяку роботу: історію команд. Він зберігає останні введені команди. Ви можете отримати до них доступ і вам не потрібно повторно вводити їх, щоб повернути. Крім того, bash пропонує можливість редагування цих команд.
Простий виклик історії надає огляд команд, що містяться в історії. Ввівши число, ви побачите останні n записів.
Лістинг 7.59 Історія
Ви можете видалити небажані записи в історії зі списку історії, використовуючи history -d.
Прокрутка історії
Наприклад, припустимо, була виконана команда find/usr/local/bin -name "ім'я файлу". Тепер ви хочете запустити ту саму команду з іншим ім'ям файлу. Щоб не потрібно було вводити все знову, ви можете завантажити останню команду, введену в командний рядок, клавішею курсору вгору.
Повторне натискання клавіші зі стрілкою вгору, bash перезавантажує команду, викликану до останньої, у командний рядок тощо - все так просто. За допомогою клавіші зі стрілкою вниз ви можете ще раз переглядати історію вперед.
Редагування в командному рядку
Для того, щоб адаптувати старий виклик пошуку, нове ім'я файлу потрібно вставити у старий вхід команди. За допомогою клавіш курсору можна переміщатися вліво та вправо в командному рядку, а також видаляти та вставляти символи у всіх позиціях.
Оклик має дуже особливу функцію в bash. Він використовується для виклику команд з історії.
Ви можете повторити останню введену команду з двома знаками оклику:
Лістинг 7.60 Повторне виконання останньої команди
Ви також можете повторити одну з команд, що зберігаються в історії команд, вказавши номер команди. Ви можете отримати номер історії команди, зателефонувавши команді history. Потім команда виконується знову за допомогою! N (де n - номер команди).
Лістинг 7.61 !n
Пошук команд
Дуже корисною функцією bash є те, що він може шукати команди, вказуючи перші кілька символів команди. Зараз вам, мабуть, цікаво, що ви можете собі уявити? Як це часто буває, цю функціональність найкраще пояснити на прикладі.
[наприклад] Користувач спочатку вводить команду uname, а потім команду безвідмовної роботи. Тепер він хотів би знову запустити час безвідмовної роботи, пізніше без уваги, без введення цих команд знову. Перший погляд на історію команд часто громіздкий. Отже, користувач використовує пошук команд.
Найпростіший варіант тепер такий: користувач вводить знак оклику, а потім негайно слідує за першою буквою команди, тобто «u». Потім оболонка викликає останню команду, яка починалася з "u", тобто час безвідмовної роботи. Якщо користувач хоче зателефонувати без імені, недостатньо поставити «u» після знака оклику. Для цього потрібно вказати другу букву команди, тобто «n», після чого остання команда, що розпочалася з «un», виконується знову:
Лістинг 7.62 Пошук команд
Ви можете знайти останню команду, яка містила певний рядок, зателефонувавши !? бігти знову.
З мішка хитрощів
Це набагато зручніше робити за допомогою комбінації клавіш Ctrl + R. За допомогою цієї процедури bash автоматично показує, яку команду буде виконано під час редагування командного рядка:
Лістинг 7.63 Ctrl + R
Замініть частини старих команд
Ви пам’ятаєте повторний дзвінок для пошуку, який потрібно було відредагувати для пошуку нового імені файлу? Це можна знову спростити в bash, якщо команда find була останньою введеною. Вказавши рядок символів, який потрібно замінити в останній команді, можна виконати стару команду модифікованою.
Зазначений виклик пошуку виглядав так: find/usr/local/bin -name "ім'я файлу". Для того, щоб шукати ім'я файлу zsh і використовувати ту саму команду, старою командою потрібно маніпулювати за шаблоном \ Alter-String \ NewString \, тобто:
Лістинг 7.64 Команда find з новою назвою файлу
7.11.2 Автоматичне заповнення імен файлів
Подібною практичною особливістю, як історія команд, є автоматичне заповнення імен файлів, що керується в bash клавішею табуляції. Оскільки програми також відображають файли під Unix, ця функція, природно, також працює з ними.
Під час використання клавіші Tab слід розрізняти два випадки:
- Існує лише один відповідний файл.
- Є кілька відповідних файлів.
Лише один кандидат
Для першого випадку ми створимо приклад каталогу, в який ми помістимо файл з назвою abc.txt.
Лістинг 7.65 Створіть зразок каталогу з одним файлом
Якщо ми зараз використовуємо таку програму, як/bin/ls, якій передаємо цей файл як параметр, нам просто потрібно натиснути клавішу Tab, оскільки в каталозі є лише один файл, і bash автоматично присвоює ім'я файлу Бажане положення у вході.
[Наприклад, спробуйте самі: перейдіть до нового каталогу, введіть ls та пробіл і натисніть клавішу Tab. Тепер Bash повинен автоматично записати ім'я файлу abc.txt у командний рядок.
Тепер ми створюємо файл з іменем xyz.txt у каталозі. Якщо повторити останній приклад за нових умов, це не буде працювати легко. Баш сам не знає, який із двох файлів передати як параметр. Тепер фокус працює таким чином, що вводиться стільки символів імені файлу, поки не існує лише одного імені файлу, до якого застосовуються перші символи - у цьому випадку достатньо першої літери файлу (або «a», або «B») xВ «), оскільки жодна назва файлу не містить однакових символів. Якщо клавішу Tab натиснути ще раз, bash знову автоматично заповнить ім'я файлу.
Але Bash може зробити для вас трохи роботи. Припустимо, що в одному каталозі є два файли abc та abd. Якщо в будь-якому випадку немає вибору між символами, натискання клавіші Tab завжди приводить ці символи до монітора. Отже, якщо ви натиснете клавішу Tab у такому каталозі, bash напише перші два символи (оскільки вони в будь-якому випадку однакові, і ви повинні їх ввести) на екрані. Тоді вам потрібно буде лише ввести «c» або «d».
У випадку, якщо файл xyz все ще присутній у каталозі, перший лист потрібно ввести знову, оскільки два випадки можуть повторитися знову.
Якщо файлів кілька, можна двічі натиснути клавішу Tab, щоб отримати огляд файлів у каталозі під час введення команд. Натискаючи це двічі, bash завжди надає вам вибір файлів, який все ще можливий відповідно до вашого попереднього введення.
У прикладі це означає: Якби у вас знову були три файли xyz, abc та abd у каталозі, bash спочатку перерахував би всі три. Якщо після цього ви введете "a" і натиснете клавішу Tab, bash надасть вам "b" (єдиний корисний варіант) на екрані. Якщо ви двічі клацнете клавішу Tab ще раз, bash тепер виведе два можливі імена файлів abc та abd.
Більше того, клавіша табуляції В є «інтелектуальною»: На початку введення оболонки має сенс лише виконувана команда - відповідно заповнюються лише виконувані файли або вбудовані оболонки.