Программы
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 5 — длинные команды

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 5 — длинные команды

Используйте эскейп-символы, чтобы управлять отображением длинных команд. Это пятая «хорошая привычка» из статьи «Learn 10 good UNIX usage habits» от IBM.

5. Используйте эскейп-символы, чтобы управлять отображением длинных команд.

Это пятая «хорошая привычка» из статьи «Learn 10 good UNIX usage habits» от IBM.

Начать с первой части: «умное использование mkdir» .

Перейти к предыдущей части: «про кавычки и переменные» .

Напоминаю, что перевод вольный. Добавлены комментарии, когда было что добавить из «хороших привычек».

Возможно, вы уже видели код, в котором используются бекслеши (\) в конце строк. А за ними на следующей строке уже следует часть кода, которая не уместилась в строку. Многие оболочки командной строки поддерживают подобное разбиение строк — так мы можем экранировать переводы строк. Например:

$ tar czvf project.tar.gz project/bin \
 project/demo project/doc project/lib

Однако, не нужно этим злоупотреблять — если можешь написать несколько коротких команд вместо одной длинной — пиши короткие. Так понятнее.

Всё же есть неплохие примеры использования бекслеша для экранирования перевода строки, создания многострочных команд. К примеру, с помощью них можно сделать более читаемым код с управляющими операторами:

~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Или даже так:

~ $ cd tmp/a/b/c \
>                 || \
> mkdir -p tmp/a/b/c \
>                    && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Таким образом логические части разделены визуально, и их проще читать.

Также хочется отметить удобство разделения команды на строки, когда команда принимает список аргументов. Для примера можно рассмотреть apt:

apt install -y \
    git-core \
    virtualenvwrapper \
    python3 \
    python3-pip \
    python3-dev \
    libxml2-dev \
    libxslt1-dev \
    build-essential \
    libffi-dev \
    libssl-dev \
    libjpeg8-dev \
    zlib1g-dev

Такое перечисление библиотек куда проще воспринимать, нежели однострочную портянку. Этот код ещё и проще поддерживать — в git diff будет видно: какие пакеты были удалены, а какие добавлены в список установки.

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

Также может быть вам интересно:

Увеличиваем таймауты uwsgi+nginx (обходим 504 Gateway Time-out)

Если на вашем веб-сервере есть запросы, которые выполняются дольше 60 секунд, вы что-то делаете не так. Даже секунда на запрос — это ужасно долго, а 60 — те, что по умолчанию в nginx — просто ужас. Однако, есть ряд случаев, когда это необходимо/допустимо.

Читать »

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 6 — списки команд

Сегодня мы рассмотрим работу со списками команд, запуском их в командной оболочке и использованием результата в дальнейшей работе. Это шестая часть перевода статьи «Learn 10 good UNIX usage habits» от IBM.

Читать »
Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

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

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django - своя регистрация на сайте

Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит - надо уметь создавать пользователей, либо предоставлять возможность регистрации Django пользователей.