Интерфейс командной строки — Примеры

Пример 1 — Разрушительная команда прямо из результатов поиска

Разработчик вставляет однострочник из найденного ответа, заменив только путь. Он выполняется, и результат оказывается не тем, что ожидалось. Объясните, чего здесь не хватило терминалу, затем покажите привычку, которая это предотвращает.

# из результата поиска, написанного для другой раскладки репозитория
rm -rf $(grep -rl "TODO" src/)
# вывод: пусто. код возврата: 0, потому что rm отработал успешно

Решение

grep -rl "TODO" src/          # сначала посмотреть список совпадений
grep -rl "TODO" src/ | wc -l  # посчитать до удаления чего-либо
grep -rl "TODO" src/ | xargs rm   # теперь решение осознанное

Каждый инструмент читает текст и пишет текст, поэтому вывод можно проверить как данные, прежде чем что-то с ним делать. Одна эта привычка превращает необратимый класс случайностей в задержку на несколько секунд. Необходимость её дают две детали. Если grep завершается с ненулевым кодом и пустым выводом, результат выглядит в точности как корректный пустой результат, поэтому rm может молча ничего не сделать или удалить неожиданный набор файлов. А чтение справки для того инструмента, который у вас есть, вместо доверия команде, написанной для другой версии, — та же дисциплина, к которой запись призывает для всего, что удаляет или перезаписывает.

Пример 2 — Команда, набранная в третий раз за неделю

Инженер снова набирает один и тот же длинный вызов, чтобы посмотреть, над чем работал. Это медленно и приводит к ошибкам, и каждый раз он набирает его по памяти. Скажите, какую привычку здесь просят применить, затем примените её.

# набрано по памяти, третий раз за неделю
git log --since="1 week ago" --author="$(git config user.name)" --oneline

Решение

# ~/bin/weekly  — именованный скрипт лучше вызова в шестьдесят символов
#!/bin/sh
# список моих коммитов за последнюю неделю
git log --since="1 week ago" --author="$(git config user.name)" --oneline

# для короткого случая достаточно псевдонима
alias ll='ls -alh'

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