Я был в шоке! Эти 7 секретов Bash вывели меня на новый уровень: теперь работаю в терминале молниеносно!

Tux, талисман Linux, в тёмных очках выглядывает из-за большого терминального окна с командами.

Вы часто сидите в терминале — или только осваиваете его? Bash — это целый кладезь удобств, и далеко не все лежит на поверхности. Делюсь семью трюками, которые помогли мне сократить время на ввод и редактирование команд до минимума.

В основном эти фишки основаны на работе с историей Bash — с помощью расширений команд. Возможно, про суперпростую команду !! — повторить предыдущую — вы уже знаете. Но это только начало: Bash позволяет брать любую нужную команду из истории, менять у неё отдельные части и запускать заново.

В механизме расширения истории Bash есть три основных сегмента. !! — это так называемый «указатель события», а ещё есть «указатель слова» и (опционально) «модификатор». Всё это вместе выглядит вот так:

Проще всего объяснить на живом случае:

Принцип такой: сначала выбираем команду, затем слово или аргумент, а дальше по желанию применяем модификатор. Например, !!:2:p значит — взять предыдущую команду (!!), второй аргумент (2), и просто вывести его (p), не выполняя ничего лишнего.

Первая ! включает расширение истории, а то, что идёт после неё (например, ещё одна !) — это уже указатель события: указывает, с какой командой работать. Один нюанс: если вместо ! используете ^ — сработает механизм мгновенной замены (ниже расскажу).

Dell XPS 13 Plus 2023

Dell XPS 13 Plus с Linux

В официальной документации — целые списки возможностей, но глазами по ним пробежаться сложно, гораздо проще понять всё на практике. Вот мои любимые рабочие трюки, которые реально мне помогли.

Используйте все аргументы предыдущей команды заново

Разным командам часто нужны одни и те же параметры

Маскот Linux в очках и подтяжках за ноутбуком, под пиксельной надписью 'GEEK'.

Иногда бывает, надо сразу после одной команды передать те же аргументы в другую. Например:

Ну не хочется же снова писать «foo» и «bar» вручную — и это не обязательно!

Вот так: команда просит — «возьми предыдущую (!!) и все её аргументы (*)». Получится chmod 644 foo bar.

Есть и просто короткая форма: для выражений вроде «*», «^», «$», «%» не нужен !:. Не мудрите — пишите лаконично:

!* — то же, что !!:*.

Как быстро взять нужный аргумент из истории

Длинные аргументы набирать заново — себя не уважать!

Мужчина с ноутбуком в кресле, рядом Tux, иконки медиа и игр.

По тому же принципу легко выцепить из предыдущей команды конкретный аргумент по номеру:

Эта строка полностью аналогична этому:

А теперь немного подробнее о «указателе события»: выбирать можно не только последнюю команду!

Указатель события — это то, что даёт Bash понять, какую команду брать (например, второе ! в !!).

! активирует расширение, а -2 — ищет команду двумя шагами раньше. Кстати, !! это то же самое, что !-1.

И еще: часто применяют номера команд прямо по истории, например !100 — это команда номер 100 в вашем списке.

Мгновенно вставляем имя предыдущей команды

Стоит попробовать — и не сможете без этого жить!

Маскот Linux сидит в ракушке за ноутбуком, вокруг логотипы PowerShell, Nushell и Murex.

Ввести имя команды, казалось бы, легче простого — но после пары дней с !:0 пальцы будут делать это на автомате:

Этот вариант полностью эквивалентен touch baz.

Если не указываете сегмент события (символ после первой !), Bash берёт за основу предыдущую команду.

И да, можно брать команды по номеру:

Хотя честно говоря, если знаете номер, быстрее набрать её вручную.

Как молниеносно исправлять опечатки в терминале

Курсор туда-сюда — забудьте, есть способ проще!

Иллюстрация: Tux взволнованно смотрит на терминал с иконкой предупреждения и черепами.

Уверен, у каждого случались опечатки в командах. Редактировать их вручную — настоящее мучение. А ведь можно исправить ошибку за секунду — с помощью быстрого поиска и замены.

И выглядит это чрезвычайно просто:

Окно терминала: команда echo повторяется, но с одним изменённым словом через замену строки.

Если вы когда-либо пользовались sed, принцип тот же:

Вспоминаем первый или последний аргумент команды

В сто раз удобнее, чем вспоминать номер аргумента!

Мужчина с ноутбуком рядом с Tux, маскотом Linux, в солнечных очках.

Вы уже знаете, как повторно использовать все аргументы прошлой команды (!*), но можно выбрать только первый или последний из них.

Чтобы взять первый аргумент:

Это эквивалент chmod 644 foo, и, кстати, !^ — это то же, что !!:1, то есть первый аргумент.

А чтобы получить последний:

Это аналог chmod 644 bar.

Символ «$» особенно удобен, если не знаете, сколько у команды было аргументов.

И небольшой лайфхак для запоминания: если знакомы с регулярными выражениями — «^» и «$» всегда означают начало и конец строки. Здесь тот же принцип!

Как посмотреть реальную команду до запуска

Проверяйте всё перед отправкой — себя потом похвалите

Талисман Linux, Tux, задумчиво смотрит, вокруг таблички 'Do' и 'Don't'.

По началу расширения истории могут путать, поэтому не стесняйтесь визуально проверять, что за команда получится после всех сокращений.

Для этого просто введите команду с расширением и нажмите Ctrl+Alt+E:

Bash полностью развернёт строку (но не запустит команду) — увидите, точно ли всё написали верно.

Телепорт к началу или концу строки в терминале

Мучиться со стрелками не нужно — используйте горячие клавиши!

Талисман Linux, в тёмных очках за ноутбуком, вокруг окна с логотипом i3 window manager.

Многие до сих пор не знают, как быстро прыгать по строке команд: в Bash давно всё продумано. Чтобы оказаться в начале строки, нажмите Ctrl+A. В конец? Ctrl+E — буквально секунда!

Если любите управление как в Vim, просто добавьте в .bashrc строчку:

Данные на сервере отображаются на мониторе с иконкой базы данных MySQL.

5 лучших утилит для мониторинга ресурсов в терминале Linux

Стандартных средств порой не хватает — вот чем реально стоит пользоваться.

На этом, пожалуй, всё! Помните — о расширениях истории Bash подробнее написано в документации. Там ещё больше примеров и полезных лайфхаков — прокачайте терминал на максимум!

Tux, талисман Linux, в тёмных очках указывает на крупный 3D-символ терминала.

Эти фишки fzf кардинально меняют работу в терминале Linux

Без fzf теперь уже не представляю работу — обязательно попробуйте, если ещё нет!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка — это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!

Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в:

Алекс Бежбакин
Оцените автора
Добавить комментарий