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

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

Опубликовано: 08.08.2017

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

Это шестая часть перевода статьи «Learn 10 good UNIX usage habits» от IBM.

6. Группируйте команды в списки.

Большинство из командных оболочек предоставляет различные способы группировать команды вместе. Таким образом вы можете передавать результат их общего выполнения дальше в пайп (на вход другой программе), либо писать весь их вывод в одно и то же место. Вы можете это делать, выполняя список команд прямо в этой же оболочке, либо в подоболочке (дочерней командной оболочке).

Выполняем список команд в подоболочке

Чтобы выполнить список команд в подоболочке, заключаем их в круглые скобочки. Сделаем это и перенаправим вывод в утилиту mailx:

~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

В этом примере содержимое архива распаковывается в директорию tmp/a/b/c, а вся информация, включая список распакованных файлов, будет передана на вход утилите mailx. Та же отправит этот вывод на адрес admin.

Подоболочки удобно использовать, если вы не хотите, чтобы используемые переменные окружения были переопределены для вашей текущей командной оболочки.

В примере выше переменная $VAR не будет определена после выполнения списка команд, так как была определена не в текущей оболочке, а в подоболочке. Также, если $VAR был определён до в вашей текущей оболочке, он не будет изменён данной командой.

Выполняем список команд в текущей оболочке

Аналогично можно выполнять списки команд в текущей оболочке. Для этого вместо круглых скобок используем фигурные. Обратите внимание: необходимо ставить пробелы между фигурными скобками и командами, чтобы командная оболочка вас правильно поняла. Также последнюю команду в списке нужно заканчивать точкой с запятой, как это сделано в примере:

~ $ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"
Также может быть вам интересно:
ПрограммыFreeBSDLinuxMacOSКодТрюки BashТерминал/КонсольТерминал/Консоль
← 10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 5 — длинные команды git push в non-bare репозиторий →