Создать вложенную структуру
mkdir -p project/src/{configs,utils,tests}
Нюанс: раскрытие скобок — фича bash, а не mkdir. В
sh строка отработает буквально, создав каталог с именем {configs,utils,tests} — проверил, ошибки при этом никакой. То же будет от пробела после запятой и от одного элемента без запятой: {only} останется как есть.Если скрипт начинается с
#!/bin/sh, скобки не использовать.Вернуться в предыдущий каталог
cd -
Нюанс:
cd - печатает путь в stdout. В скрипте это мусор в выводе, а $(cd -) вообще бесполезен — подстановка уходит в подоболочку, и рабочий каталог самого скрипта не меняется. Для скриптов тише так:
cd "$OLDPWD"
Ходить по каталогам стеком
pushd /var/log >/dev/null
popd >/dev/null
Нюанс: лишний
popd возвращает directory stack empty и код 1. Под set -e скрипт на этом падает — а такое легко получить, если между pushd и popd стоит выход по ошибке. Перенаправление в /dev/null тоже нужно: обе команды печатают содержимое стека.Пройти сквозь симлинк
cd -P /var/run
Проверил на своём симлинке: обычный
cd оставляет PWD равным /tmp/dd/link, с -P он становится /tmp/dd/real. Нюанс не в самом переходе, а в том, что будет дальше. Из link/sub команда cd .. вернёт в link, а cd -P .. — в real. Скрипт, который ходит относительными путями через симлинк, легко уедет не туда. Заодно pwd -P показывает физический путь, когда pwd показывает логический.Снести пустую цепочку каталогов
rmdir -p a/b/c
Поднимается снизу вверх, пока каталоги пустые. Нюанс: наткнувшись на непустой, останавливается с
Directory not empty — но то, что успел удалить ниже, уже удалено. Возврата нет, так что для глубоких цепочек лучше сначала посмотреть find a -type d -empty.А вы по дереву каталогов ходите
pushd или всё-таки алиасами и cd -?#Linux #Bash #Terminal #Scripting #DevOps