Программы
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 будет видно: какие пакеты были удалены, а какие добавлены в список установки.

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

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS