Навигация по сложным структурам каталогов в терминале Linux может отнимать много времени, особенно при системном администрировании или написании сценариев. Хотя cd (change directory) является основной командой для навигации по каталогам, ей не хватает возможности управлять стеком каталогов – функция, которую предоставляют pushd и popd.
В этой статье мы подробно рассмотрим команды pushd и popd и покажем вам, как упростить навигацию по каталогам и сделать работу в терминале более эффективной.
pushd (push directory) сохраняет текущий каталог в стеке, а затем переключается на новый каталог.
popd (pop directory) удаляет верхний каталог из стека и возвращает вас к предыдущему.
Эти команды являются частью механизма стека каталогов, доступного в bash, zsh и других современных оболочках.
pushd и popd неоценимы, когда:
Вы часто перемещаетесь между двумя или более каталогами.
Вы пишете сценарии оболочки, которым нужно временно переключаться между каталогами.
Вы хотите избежать загрязнения оболочки ненужными командами cd и сохранить контекст.
Перемещает текущий каталог в стек.
Изменяет каталог на /path/to/target.
🔁 Пример:
Теперь вы находитесь в каталоге /var/www/html, а ваш домашний каталог ~ хранится в стеке.
Выбрасывает верхний каталог из стека.
Возвращает вас в предыдущий каталог.
Продолжение приведенного выше примера:
Вы вернулись в ~.
Используйте dirs для просмотра текущего состояния стека каталогов:
Пример вывода:
Индекс 0 – это ваш текущий каталог.
Более высокие индексы представляют более ранние каталоги.
Вы можете использовать:
для перемещения текущего каталога в стек без переключения каталогов.
Эффективно для итеративной разработки без повторяющихся команд cd.
Вот сценарий, который собирает код во временной директории и возвращается обратно в чистом виде:
#!/bin/bash
pushd /tmp/build-env || exit 1
# Configure and build
cmake ~/projects/myproject
make -j$(nproc)
popd
Если скрипт не выполнится внутри /tmp/build-env, вы все равно вернетесь в исходное место.
Это делает ваши скрипты более удобными для сопровождения, особенно при возникновении ошибок – вы можете безопасно вернуться в исходный каталог.
При работе с несколькими вызовами pushd, dirs -v помогает проследить историю навигации.
Вы можете удалить определенный каталог из стека:
Удаляет каталог с индексом 1 (не обязательно текущий).
Stack Overflow (не сайт 😄): Чрезмерное использование pushd без соответствующих вызовов popd может раздуть ваш стек, что приведет к запутанному состоянию каталогов.
Не везде доступны: pushd и popd являются встроенными модулями в bash, zsh и подобных оболочках – они могут быть недоступны в минимальных оболочках, таких как sh.
Не постоянны: Стек каталогов основан на сессиях. После завершения терминальной сессии стек сбрасывается.
Добавьте в .bashrc или.zshrc:
Это сократит количество нажатий клавиш и повысит производительность.