pwd

Wypisuje ścieżkę bieżącego katalogu roboczego.

pwd (od print working directory) wypisuje pełną, bezwzględną ścieżkę katalogu, w którym aktualnie się znajdujesz. To pierwsza komenda, po którą sięgasz, gdy zgubisz się w drzewie katalogów albo gdy skrypt musi wiedzieć, skąd został uruchomiony. Działa zawsze i wszędzie, bo w Bashu jest wbudowana w powłokę (a w razie potrzeby istnieje też /bin/pwd).

Składnia i najważniejsze opcje

Podstawowa składnia jest banalnie prosta:

pwd [-LP]

  • -L — tryb logiczny (domyślny): wypisuje ścieżkę zgodną ze zmienną środowiskową $PWD, czyli z dowiązaniami symbolicznymi pozostawionymi tak, jak do nich weszłeś.
  • -P — tryb fizyczny: rozwija wszystkie dowiązania symboliczne i pokazuje rzeczywistą ścieżkę na dysku.
  • --help — wyświetla krótką pomoc (dotyczy wersji z coreutils, czyli /bin/pwd).
  • --version — pokazuje wersję polecenia (również tylko w wariancie z coreutils).

To w zasadzie cały arsenał. pwd nie przyjmuje argumentów-ścieżek — od podawania katalogów jest cd.

Przykłady użycia

  • pwd — wypisuje bieżący katalog, np. /home/jan/projekty. Najczęstsze użycie, gdy chcesz się upewnić, gdzie jesteś.
  • pwd -P — jeśli /home/jan/projekty jest dowiązaniem, pokaże prawdziwą lokalizację, np. /mnt/dane/projekty.
  • pwd -L — wymusza tryb logiczny i pokaże ścieżkę z dowiązaniem nietkniętym (przydatne, gdy zmieniłeś domyślne zachowanie powłoki).
  • cd /var/log && echo "Jestem w: $(pwd)" — wstawienie wyniku pwd do komunikatu; klasyka w skryptach.
  • SCRIPT_DIR=$(pwd) — zapisanie bieżącej ścieżki do zmiennej, żeby później do niej wrócić lub budować ścieżki względem niej.

Częste błędy i pułapki

Największa pułapka to dowiązania symboliczne. Domyślny -L pokaże ścieżkę „taką, jaką ją przeszedłeś”, a nie fizyczną. Jeśli skrypt liczy na realną lokalizację plików, używaj -P, bo inaczej dwie ścieżki będą wyglądać tak samo, a wskazywać różne miejsca.

Druga rzecz: w Bashu pwd to builtin powłoki, więc opcje --help i --version obsługuje wersja z /bin/pwd (coreutils), a nie builtin. Jeśli chcesz mieć pewność co do wariantu, wywołaj /bin/pwd wprost. Na macOS i innych systemach BSD /bin/pwd również wspiera -L i -P, ale nie ma długich opcji --help.

I jeszcze drobiazg: nie myl pwd ze zmienną $PWDzmienna bywa nieaktualna, jeśli ktoś ją ręcznie nadpisał, a komenda zawsze sprawdza stan faktycznie.

Powiązane komendy: cd, ls, realpath, readlink, dirname, basename.