pwd
Вывести путь к текущей рабочей директории (Print Working Directory)
Описание
pwd (от Print Working Directory) — утилита, которая выводит абсолютный путь к
текущей рабочей директории процесса оболочки. Команда существует с первых версий Unix и остаётся
неизменно простой: один вызов — одна строка вывода с полным путём.
В оболочках Bash и Zsh существует встроенная команда pwd (shell builtin),
а также внешняя утилита /usr/bin/pwd из пакета coreutils. По умолчанию вызывается встроенная.
Встроенная pwd отслеживает «логический» путь (с учётом символических ссылок, как их видит
оболочка), тогда как внешняя может возвращать «физический» реальный путь в файловой системе.
Несмотря на кажущуюся тривиальность, pwd незаменима в скриптах для получения директории
запуска, в отладке при работе с глубокими вложениями и символическими ссылками, а также для формирования
абсолютных путей динамически во время выполнения скрипта.
Синтаксис
Компоненты команды:
- pwd — вывести текущую директорию. Без аргументов ведёт себя как
pwd -L. - -L — логический путь (Logical): использует значение переменной окружения
$PWD, сохраняя символические ссылки в составе пути. - -P — физический путь (Physical): разрешает все символические ссылки и показывает реальное расположение в файловой системе.
Флаги и опции
| Флаг | Описание |
|---|---|
-L |
Логический путь (по умолчанию): использует $PWD из окружения; симлинки сохраняются в пути как есть |
-P |
Физический путь: разрешает все симлинки и выводит реальный путь в inode-дереве файловой системы |
--help |
Показать краткую справку (только внешняя утилита /usr/bin/pwd) |
--version |
Показать версию утилиты (только внешняя /usr/bin/pwd) |
| $PWD | Переменная окружения: аналог вызова pwd -L; устанавливается оболочкой автоматически при смене директории |
| $OLDPWD | Переменная окружения: хранит предыдущую рабочую директорию; обновляется оболочкой при каждом cd |
| builtin pwd | Явный вызов встроенной команды оболочки, даже если в PATH есть другая утилита pwd |
| command pwd | Вызвать внешнюю утилиту /usr/bin/pwd, минуя встроенную (полезно при отладке) |
Паттерны использования
Базовая ориентация в терминале
Быстро понять, в какой директории находишься.
pwd # /home/user/projects/ai-lesson/subjects # Эквивалент через переменную echo $PWD # /home/user/projects/ai-lesson/subjects
Получить директорию скрипта
Надёжный способ строить пути относительно расположения самого скрипта.
#!/bin/bash # script.sh SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) echo "Скрипт находится в: $SCRIPT_DIR" CONFIG="$SCRIPT_DIR/config.yaml"
Логический vs физический путь
Разница проявляется при работе через символические ссылки.
ln -s /var/log /tmp/mylog cd /tmp/mylog pwd # /tmp/mylog (логический, через симлинк) pwd -P # /var/log (физический, реальный) echo $PWD # /tmp/mylog
Возврат в сохранённую директорию
Сохранить текущее место, выполнить работу в другом месте, вернуться.
SAVED=$(pwd) cd /tmp # ... какая-то работа ... cd "$SAVED" echo "Вернулись: $(pwd)" # Или через $OLDPWD / cd - cd /tmp cd - # вернуться в предыдущую директорию
Формирование абсолютных путей в скриптах
Избежать проблем с относительными путями при смене рабочей директории.
#!/bin/bash BASE=$(pwd) INPUT="$BASE/data/input.csv" OUTPUT="$BASE/results/output.csv" cd /tmp # рабочая директория изменилась process_data "$INPUT" "$OUTPUT" # пути абсолютные
Отладка: откуда запустился скрипт
Полезно при диагностике проблем с путями в CI/CD или cron.
#!/bin/bash echo "=== DEBUG ===" echo "PWD (logical): $(pwd -L)" echo "PWD (physical): $(pwd -P)" echo "OLDPWD: $OLDPWD" echo "Script: $0" echo "============="
Советы и предупреждения
В скриптах, где
pwd нужна часто в цикле, используйте $PWD вместо
$(pwd) — переменная уже установлена оболочкой, без порождения нового процесса.
Разница особенно заметна в больших циклах.
В большинстве современных конфигураций Bash/Zsh промпт уже содержит текущую директорию (переменная
$PS1 включает \w или аналог). Но pwd дужна
для получения полного абсолютного пути, если промпт показывает сокращение (напр. ~/projects).
pwd (builtin, -L) и /usr/bin/pwd -P могут вернуть разные пути, если
вы попали в директорию через символическую ссылку. В скриптах явно указывайте -L
или -P, чтобы поведение было предсказуемым.