Интерфейс командной строки — Примеры
Пример 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'
Длинная команда, набранная впервые, разовая; на второй раз она становится скриптом. Имя с комментарием вспоминается быстрее, чем сам вызов, запускается из любого каталога, как только попало в путь поиска, и даёт следующему читателю — часто тому же человеку месяцы спустя — однострочное объяснение того, что она делает. Дополняет это привычка искать в истории вместо повторного набора: так команда переиспользуется точно такой, какой она выполнялась, а не какой запомнилась. Вместе эти две привычки составляют большую часть того, что отличает удобного пользователя терминала от беглого.