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

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

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

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

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

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

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

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

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

Чтобы выполнить список команд в подоболочке, заключаем их в круглые скобочки. Сделаем это и перенаправим вывод в утилиту 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"