Начните экспериментировать со своим терминалом и найдите новые способы повысить продуктивность программирования.

Программисты обычно склонны использовать интерфейсы командной строки, а не графические интерфейсы для выполнения действий, связанных с программированием. Несмотря на то, что большинство графических интерфейсов предлагают сочетания клавиш, нам часто приходится выполнять несколько щелчков мышью и движений при работе с графическими интерфейсами. С другой стороны, взаимодействие с командной строкой мотивирует разработчиков делать почти все с командами и синтаксисом сценариев, постоянно держа руки на клавиатуре. Кроме того, мы можем даже быть более продуктивными в деятельности по разработке, комбинируя несколько команд.
Как программисты, мы уже используем команды Unix или Linux для выполнения различных операций, таких как обработка файлов, настройка операционной системы и обработка сетевых запросов. Также мы часто используем современные фреймворки и средства разработки через командную строку (например, программу Create React App).
Если вы выйдете за рамки известных команд CLI и узнаете больше о внутреннем устройстве терминала, вы сможете узнать больше уникальных способов стать более продуктивным и уверенным в своем интерфейсе терминала. В этой статье я объясню несколько менее известных концепций, связанных с терминалом, с помощью практических экспериментов.
Отправка содержимого в другое окно терминала
Программисты используют несколько физических экранов на своих компьютерах для одновременной работы над несколькими действиями по разработке. Некоторые программисты открывают несколько окон терминалов на этих экранах. Между тем, некоторые программисты обычно работают с несколькими окнами терминала на одном физическом экране. Что, если нам нужно отправить вывод определенной команды в другое существующее окно терминала?
Каждый экземпляр терминальной программы с графическим интерфейсом подключается к файлу устройства, называемому файлом псевдотерминала. Эти файлы псевдотерминала помогают терминалам с графическим интерфейсом отправлять и захватывать данные ввода-вывода от дочерних процессов. Откройте окно терминала и введите следующую команду, чтобы увидеть все доступные псевдотерминальные устройства:
ls /dev/pts
Если у вас открыто только одно окно терминала, вы увидите два файла устройства: ptmx и 0. Текущий терминал использует файл /dev/pts/0 для обработки данных ввода-вывода с помощью процессов — вы можете найти текущий псевдотерминал с помощью tty. Например, следующая команда выводит некоторый текст на сам текущий терминал, если псевдотерминал текущего терминала /dev/pts/0:
echo "Hello" > /dev/pts/0
Используя эту экспериментальную концепцию, теперь вы можете отправлять выходные данные команд непосредственно в другое существующее окно терминала и наоборот, как показано ниже.

Я объяснил файлы устройств Unix далее в следующей истории:
Эффективная перезагрузка определений .bashrc
Если мы определяем псевдонимы и переменные среды через терминал REPL, эти конфигурации стираются при выходе из терминала. Поэтому интерпретатор Bash предлагает файл .bashrc для добавления всех определений сценариев запуска. Всякий раз, когда вы открываете новое окно терминала с помощью Bash, запускается скрипт .bashrc, поэтому мы можем добавлять туда постоянные псевдонимы, переменные среды и глобальные функции.
Нам часто приходится обновлять этот сценарий запуска во время настройки инструментов разработки. Как вы обычно обновляете свой терминал новой версией сценария запуска? Некоторые программисты часто вводят bash, чтобы открыть новый экземпляр интерпретатора Bash, но это создаст ресурсоемкую цепочку процессов следующим образом:

Существует два основных подхода к эффективной перезагрузке файла .bashrc. Первый подход заключается в использовании встроенной команды source, как показано ниже.
source ~/.bashrc
Приведенная выше команда снова выполняет сценарий .bashrc. Второй подход заключается в замене текущего экземпляра оболочки встроенной командой exec.
exec bash
Оба вышеуказанных способа лучше и продуктивнее, чем ввод bash или открытие нового окна терминала вручную.
Информация о выполнении задач с помощью звонков и предупреждений
Программисты запускают различные команды в терминальных окнах. Иногда они вводят мгновенные команды, такие как ls и pwd. Но иногда им приходится инициировать длительные задачи с помощью терминальных команд. Например, команды создания приложения React или приложения React Native обычно занимают больше времени из-за установки глубоких зависимостей.
Некоторые программисты обычно вводят эти длительные команды и ждут завершения. Между тем, некоторые программисты работают над другим действием и часто проверяют статус долго выполняющейся команды. Давайте найдем более продуктивный способ управления длительными задачами.
Если вы всегда носите наушники или используете динамики, воспроизведение звукового сигнала — это хороший способ определить длительное выполнение команды. Посмотрите на следующую команду:
sleep 5; printf "\a"
Приведенная выше команда воспроизводит звуковой сигнал после завершения команды sleep. Но что, если есть несколько длительных команд, а ваши динамики отключены? Затем мы можем использовать предопределенный псевдоним alert, как показано ниже.
sleep 5; alert
Приведенная выше команда показывает завершение задачи с ранее введенным фрагментом команды.

Псевдоним alert доступен в большинстве дистрибутивов GNU/Linux, но если он вам не подходит, вы можете добавить следующий фрагмент в файл .bashrc, чтобы активировать его:
Команда notify-send помогает создавать современные сценарии Bash, как описано в следующей истории:
Использование терминала в качестве калькулятора
Программисты не так часто используют многие приложения с графическим интерфейсом, за исключением терминала, редактора кода и веб-браузера. Однако в некоторых сценариях веб-разработчики склонны использовать инструменты с графическим интерфейсом, такие как Postman, для тестирования веб-API вместо инструментов командной строки, таких как curl.
Каждая операционная система GNU/Linux предлагает программу-калькулятор с графическим интерфейсом, но большинство программистов не склонны использовать ее для повседневных вычислений. Если нам нужно выполнить преобразование единиц измерения или конвертацию валюты, мы можем ввести его в поиске Google, чтобы найти ответы. Нам часто приходится выполнять различные вычисления, когда мы работаем с алгоритмическим решением задач. Что, если вам нужно вычислить математическое выражение — когда вы работаете над задачей программирования?
Мы можем открыть калькулятор командной строки с помощью команды bc -l (-l включает вычисления с плавающей запятой). Посмотрите на следующее превью:

Несмотря на то, что программа называется базовым калькулятором (также известным как bc), она поддерживает определения переменных, сложные выражения и математические функции. Вы также можете использовать Python REPL в качестве простого калькулятора, если вам нужно выполнять математические операции с синтаксисом современного языка. Например, следующее выражение Python вычисляет длину окружности круга с радиусом в 7 единиц:
2 * math.pi * 7
Вложенные оболочки, комбинации команд и раскрытие фигурных скобок
Bash — это командный язык, поэтому он предлагает множество функций для продуктивного написания команд и улучшения сценариев автоматизации. Bash предоставляет способ создания вложенных оболочек, которые мы можем использовать для инициализации изолированных сред выполнения скриптов. Например, мы можем изменить текущий рабочий каталог для конкретной команды, не затрагивая текущий рабочий каталог на вашем терминале, как показано ниже.
(cd backend; npm i)
Bash также позволяет изменять переменные среды для процесса. Посмотрите на следующий пример:
PORT=5000 ./myscript.py
Приведенная выше команда устанавливает переменную среды PORT только для среды выполнения скрипта Python без обновления исходного экземпляра оболочки.
Иногда мы можем объединить несколько команд, чтобы сделать что-то быстрее. Мы можем объединить несколько команд в одну, используя операторы Bash, такие как &&, ||, | и ;. Функция подстановки команд также помогает нам комбинировать несколько команд. Например, мы можем отправить скрипту только текстовые файлы текущего каталога в качестве параметров, используя следующую команду:
./yourscript.py `find . -name "*.txt"`
Функция раскрытия фигурных скобок помогает генерировать строки на основе определений диапазона. Например, определение расширения {1..5} генерирует список целых чисел, разделенных пробелами, от 1 до 5. Кроме того, /path/{bin,src} возвращает следующий вывод:
/path/bin /path/src
Теперь мы можем комбинировать команду mkdir и подстановку фигурных скобок для одновременного создания нескольких дочерних каталогов.
mkdir project/{bin,src,lib}
Спасибо за прочтение
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Нанимайте лучших инженеров-программистов на Платформе вакансий Level Up.