Подоболочка - копия родительской оболочки, со всеми ее локальными алиасами, функциями, переменными и т.д.
С дочерними оболочками так не работает - тот же алиас мы должны определить в конфиге, иначе она его не сможет использовать.
Подстановка команд, которую мы рассматривали, отрабатывает в подоболочке и возвращает вывод.
Бывают случаи, когда нам передавать вывод никуда не требуется, но и текущую оболочку трогать не хочется. Вот тут-то и можно явно создать подоболочку и в ней выполнить, что надо.
Для этого просто заключим команду в круглые скобки:
$ (cd /usr/local && ls)
bin etc games lib man sbin share
$ pwd
/home/smith
Как видим, первая команда выполнилась в подоболочке и не поменяла текущую рабочую директорию => нам не нужно повторно вызывать cd.
Заключать в скобки можно и часть комбинированной команды. Типичным примером является конвейер.
Предположим, нам нужно через команду tar извлечь файлы из архива в определенный каталог. Можно выполнить задачу несколькими способами:
1) изи - использовать флаг "-С" c указанием путь:
$ tar -xzf package.tar.gz -C ./extr
2) хардкор - передать tar-данные в подоболочку, которая зайдет в нужный каталог и выполнит архивирование из стандартного вывода (STDOUT):
cat package.tar.gz | (cd ./extr && tar xzvf -)
Сам я базово использую подоболочку, когда нужно, не меняя рабочий каталог, собрать бинарные пакеты и посмотреть на их список:
$ dpkg-buildpackage -b -us -uc && (cd ..; ls -l)
Раньше приходилось держать доп. терминал, по сути, для 1 примитивной задачи)
LinuxCamp
