linux nav

pwd

Вывести путь к текущей рабочей директории (Print Working Directory)

Описание

pwd (от Print Working Directory) — утилита, которая выводит абсолютный путь к текущей рабочей директории процесса оболочки. Команда существует с первых версий Unix и остаётся неизменно простой: один вызов — одна строка вывода с полным путём.

В оболочках Bash и Zsh существует встроенная команда pwd (shell builtin), а также внешняя утилита /usr/bin/pwd из пакета coreutils. По умолчанию вызывается встроенная. Встроенная pwd отслеживает «логический» путь (с учётом символических ссылок, как их видит оболочка), тогда как внешняя может возвращать «физический» реальный путь в файловой системе.

Несмотря на кажущуюся тривиальность, pwd незаменима в скриптах для получения директории запуска, в отладке при работе с глубокими вложениями и символическими ссылками, а также для формирования абсолютных путей динамически во время выполнения скрипта.

Синтаксис

pwd [-L|-P]

Компоненты команды:

# Базовый вызов pwd # /home/user/projects/myapp # Использование в подстановке команды echo "Скрипт запущен из: $(pwd)" # Сохранить текущую директорию в переменную SCRIPT_DIR=$(pwd)

Флаги и опции

Флаг Описание
-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 вместо $(pwd) — переменная уже установлена оболочкой, без порождения нового процесса. Разница особенно заметна в больших циклах.
Промпт показывает текущую директорию
В большинстве современных конфигураций Bash/Zsh промпт уже содержит текущую директорию (переменная $PS1 включает \w или аналог). Но pwd дужна для получения полного абсолютного пути, если промпт показывает сокращение (напр. ~/projects).
Встроенная и внешняя pwd дают разный результат при симлинках
pwd (builtin, -L) и /usr/bin/pwd -P могут вернуть разные пути, если вы попали в директорию через символическую ссылку. В скриптах явно указывайте -L или -P, чтобы поведение было предсказуемым.