Использование команд pushd и popd в Linux

Навигация по сложным структурам каталогов в терминале Linux может отнимать много времени, особенно при системном администрировании или написании сценариев. Хотя cd (change directory) является основной командой для навигации по каталогам, ей не хватает возможности управлять стеком каталогов – функция, которую предоставляют pushd и popd.

В этой статье мы подробно рассмотрим команды pushd и popd и покажем вам, как упростить навигацию по каталогам и сделать работу в терминале более эффективной.

Что такое pushd и popd?

  • pushd (push directory) сохраняет текущий каталог в стеке, а затем переключается на новый каталог.

  • popd (pop directory) удаляет верхний каталог из стека и возвращает вас к предыдущему.

Эти команды являются частью механизма стека каталогов, доступного в bash, zsh и других современных оболочках.

Когда их использовать

pushd и popd неоценимы, когда:

  • Вы часто перемещаетесь между двумя или более каталогами.

  • Вы пишете сценарии оболочки, которым нужно временно переключаться между каталогами.

  • Вы хотите избежать загрязнения оболочки ненужными командами cd и сохранить контекст.

Базовое использование

1. команда pushd

pushd /path/to/target
  • Перемещает текущий каталог в стек.

  • Изменяет каталог на /path/to/target.

🔁 Пример:

cd ~
pushd /var/www/html

Теперь вы находитесь в каталоге /var/www/html, а ваш домашний каталог ~ хранится в стеке.

2. команда popd

popd
  • Выбрасывает верхний каталог из стека.

  • Возвращает вас в предыдущий каталог.

Продолжение приведенного выше примера:

popd

Вы вернулись в ~.

Работа со стеком каталогов

Используйте dirs для просмотра текущего состояния стека каталогов:

dirs -v

Пример вывода:

0 /var/www/html
1 /home/user
  • Индекс 0 – это ваш текущий каталог.

  • Более высокие индексы представляют более ранние каталоги.

Толкать текущий каталог без переключения

Вы можете использовать:

pushd.

для перемещения текущего каталога в стек без переключения каталогов.

Примеры реального мира

Пример 1: Переход между каталогами исходных текстов и сборки

pushd ~/projects/myapp/src
# Выполнить редактирование
pushd../build
make && make install
popd # Возврат в src
popd # Возврат в исходный каталог

Эффективно для итеративной разработки без повторяющихся команд cd.

Пример 2: обертывание в сценарий оболочки

Вот сценарий, который собирает код во временной директории и возвращается обратно в чистом виде:

#!/bin/bash
pushd /tmp/build-env || exit 1
# Configure and build
cmake ~/projects/myproject
make -j$(nproc)
popd

Если скрипт не выполнится внутри /tmp/build-env, вы все равно вернетесь в исходное место.

Советы и лучшие практики

Используйте pushd вместо cd в сценариях

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

Комбинируйте с dirs -v для отладки стека

При работе с несколькими вызовами pushd, dirs -v помогает проследить историю навигации.

Использование индексов с popd

Вы можете удалить определенный каталог из стека:

popd 1

Удаляет каталог с индексом 1 (не обязательно текущий).

Общие подводные камни

  • Stack Overflow (не сайт 😄): Чрезмерное использование pushd без соответствующих вызовов popd может раздуть ваш стек, что приведет к запутанному состоянию каталогов.

  • Не везде доступны: pushd и popd являются встроенными модулями в bash, zsh и подобных оболочках – они могут быть недоступны в минимальных оболочках, таких как sh.

  • Не постоянны: Стек каталогов основан на сессиях. После завершения терминальной сессии стек сбрасывается.

Псевдонимы для опытных пользователей

Добавьте в .bashrc или.zshrc:

alias pd='pushd'
alias pp='popd'
alias dl='dirs -v'

Это сократит количество нажатий клавиш и повысит производительность.