Что такое $ PWD? (против текущего рабочего каталога)

Итак, Википедия (ссылка) сообщает мне, что команда pwd — это сокращение от «распечатать рабочий каталог», и это имеет смысл.

Но для переменной окружения «P» должно быть акронимом для чего-то еще, кроме печати.

Я слышу, как люди говорят о «текущем рабочем каталоге», что звучит лучше и более интуитивно понятно, но все же переменная среды, похоже, называется $ PWD, а не $ CWD. Никто никогда не говорит: «Вы проверяли переменную рабочего каталога печати?».

В настоящее время я играю с сервером веб-приложений uWSGI, и при запуске он сообщает мне (на странице статистики uWSGI):

"cwd":"/home/velle/greendrinks", 

, поэтому им явно нравится (более интуитивный акроним) cwd поверх pwd .

Думаю, я пытаюсь понять, понял ли я что-то неправильно, или это просто вопрос присвоения переменной среды неинтуитивного имени?


34

Это зависит от того, что вы делаю. Прежде всего, $ PWD — это переменная среды, а pwd — встроенная оболочка или фактический двоичный файл:

  $ type -a pwdpwd - это встроенная оболочка. pwd is/bin/pwd  

Теперь встроенная программа bash просто напечатает текущее значение $ PWD , если вы не используете флаг -P . Как объяснено в help pwd :

pwd: pwd [-LP]

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

    Параметры:

      -L
          распечатать значение $ PWD если он называет текущий рабочий каталог

      -P

          распечатать физический каталог без символических ссылок

    По умолчанию ‘pwd’ ведет себя так, как если бы был указан ‘-L’.

Параметр pwd binary, с другой стороны, получает текущий каталог с помощью системного вызова getcwd (3) , который возвращает то же значение, что и readlink -f /proc/self/cwd . В качестве иллюстрации попробуйте перейти в каталог, который является ссылкой на другой:

  $ ls -ltotal 4drwxr-xr-x 2 terdon terdon 4096 4 июня 11:22 foolrwxrwxrwx 1  terdon terdon 4 июня 4 11:22 linktofoo -> foo/$ cd linktofoo $ echo $ PWD/home/terdon/foo/linktofoo $ pwd/home/terdon/foo/linktofoo $/bin/pwd/home/terdon/foo/ foo  

Итак, в заключение, в системах GNU (таких как Ubuntu) pwd и echo $ PWD эквивалентны, если вы не используете параметр -P , но /bin/pwd отличается и ведет себя как pwd -P .

Источник https://askubuntu. com/a/476633/291937

Улучшите этот ответ
отредактировал 11 марта ’18 в 23:57
Скотт
8, Ответ дан 87477 золотых знаков3434 серебряных знака6060 бронзовых знаков
19 дек. >
  • 2
    @llua Ничто не запрещает PWD быть переменной окружения. На самом деле это вариант по умолчанию для большинства, если не для всех оболочек, и имеет смысл предоставить его дочерним процессам. — jlliagre 19 дек. ’14 в 12:02
  • 2
    Интересно, почему люди проголосовали против, это кажется хорошим ответом, и он подробно объяснен. — Мадс Скьерн, 19 дек. ’14 в 12:12
  • 3
    @MadsSkjern Стандарт POSIX требует, чтобы большинство встроенных функций было также доступно в виде команд. Это позволяет вызывать их напрямую из других программ без необходимости запуска оболочки. — jlliagre 19 дек. ’14 в 12:23
  • 4
    Это не совсем ответ на мой вопрос. На самом деле вопрос не в различиях между $ PWD и pwd (которые уже были освещены на U&L, прежде чем я верю), а в причинах, которые привело к названию переменной « PWD ». — Джон Смит, 19 дек. ’14 в 13:15
  • 2
    @Thushi Скорее всего, вы правы. PWD был представлен ksh88 , который задокументировал его как: PWD Текущий рабочий каталог, установленный командой cd. Вы должны добавить это в свой ответ. — jlliagre 19 дек. ’14 в 14:09
| показать 5 дополнительных комментариев

Это зависит от того, что вы делаете. Прежде всего, $ PWD — это переменная среды, а pwd — встроенная оболочка или фактический двоичный файл:

  $ type -a pwdpwd - это встроенная оболочка. pwd is/bin/pwd  

Теперь встроенная программа bash просто напечатает текущее значение $ PWD , если вы не используете флаг -P . Как объяснено в help pwd :

pwd: pwd [-LP]

    Распечатать имя текущего рабочего каталога.

    Параметры:

      -L
          распечатать значение $ PWD если он называет текущий рабочий каталог

      -P

          распечатать физический каталог без символических ссылок

    По умолчанию ‘pwd’ ведет себя так, как если бы был указан ‘-L’.

Параметр pwd binary, с другой стороны, получает текущий каталог с помощью системного вызова getcwd (3) , который возвращает то же значение, что и readlink -f /proc/self/cwd . В качестве иллюстрации попробуйте перейти в каталог, который является ссылкой на другой:

  $ ls -ltotal 4drwxr-xr-x 2 terdon terdon 4096 4 июня 11:22 foolrwxrwxrwx 1  terdon terdon 4 июня 4 11:22 linktofoo -> foo/$ cd linktofoo $ echo $ PWD/home/terdon/foo/linktofoo $ pwd/home/terdon/foo/linktofoo $/bin/pwd/home/terdon/foo/ foo  

Итак, в заключение, в системах GNU (таких как Ubuntu), pwd и echo $ PWD эквивалентны, если вы не используете параметр -P , но /bin/pwd отличается и ведет себя как pwd -P .

Источник https://askubuntu.com/a/476633/291937


19

$ PWD — это P имя текущего Работа с каталогом D

При наличии символических ссылок результаты чтения $ PWD в exec могут отличаться использование команды pwd .

Улучшите этот ответ
ответил 19 декабря ’14 в 9:39
  • 1
    Не могли бы вы привести пример того, как получить разные значения для $ PWD и pwd ? — Мэдс Скьерн, 19 дек. ’14 в 9:46
  • 4
    См. unix.stackexchange.com/q/173916/88378 и unix.stackexchange.com/a/79621/88378 — PM 2Ring, 19 декабря 2014 г., 21:56
добавить комментарий |

$ PWD — это P имя текущего W orking D irectory

При наличии символьных ссылок результаты от чтения $ PWD до выполнения команды pwd могут быть разными.



Зачем нужна команда pwd и что такое текущая рабочая директория

Из этой статьи вы узнаете, как определить текущую рабочую директорию (текущий рабочий каталог) с помощью команды pwd .

Что такое текущая рабочая директория

Текущая рабочая директория — директория, в которой пользователь работает в данный момент. При взаимодействии с командной строкой вы всегда находитесь внутри директории.

По умолчанию, когда вы запускаете операционную систему Linux, текущий рабочий каталог является домашней директорией. Изменить рабочую директорию можно с помощью команды cd .

Например, чтобы изменить текущую рабочую директорию на/tmp, используйте такую ​​команду:

  cd/t  

Путь к текущей внешней директории может быть в оболочке системы строки.

  user @  host:/tmp #  

Команда pwd

Команда pwd выводит текущую рабочую директорию. Это одна из базовых и самых популярных команд в Linux. При вызове pwd выводится полный путь к текущей рабочей директории.

Команда pwd встроена в большинство современных командных оболочек, в том числе в Bash. Её поведение отличается от выполнения /bin/pwd . С помощью команды type можно получить все места, где есть pwd :

  type -a pwd  

Получаем вывод:

  pwd - это встроенная оболочка, pwd is/bin/pwd  

Как показывает вывод, встроенная команда pwd имеет более высокий приоритет по сравнению с /bin/pwd . Поэтому она используется всякий раз, когда вы вводите в командной строке pwd . Если вы хотите использовать файл /bin/pwd , нужно указать в строке полный путь до него.

Как найти текущую рабочую директорию

Чтобы понять, в какой директории вы работаете в данный момент, введите в терминале pwd . Вывод может так выглядеть (название директории может отличаться):

 /home/linuxize  

Всё, что делает команда pwd — вывод значения переменной окружения PWD . Такой же вывод получится, если достигнут в терминале:

  echo $ PWD  


Команда pwd принимает только два аргумента:

  • -L (—logical) — не разрешать симлинки.
  • -P (—physical) — отображать физическую директорию без симлинков.

По умолчанию pwd ведёт так, как применена опция -L .

Чтобы понять, как работает аргумент -P , создадим директорию и симлинк, указывающий на эту директорию.

  mkdir/tmp/directoryln -s/tmp/directory/tmp/symlink  

Когда вы зайдёте в директорию /tmp/symlink и введёте команду pwd , вывод будет таким:

 /tmp/symlink   

То есть текущей рабочей директорией становится /tmp/symlink . Если введите команду pwd -P , вывод будет таким:

 /tmp/directory  

Симлинк (англ. Symlink, символическая ссылка) — символическая ссылка. Этим термином обозначают файл, в котором указан абсолютный или относительный путь к другому файлу или директории.

То есть есть директорию, на которую указывает симлинк.

Текущая рабочая директория — директория, из которой вы вызываете команды в заключении. Чтобы использовать текущую рабочую директорию, нужно использовать команду pwd . Если у вас остались вопросы, добро пожаловать в комментарии.

Адаптированный перевод статьи Команда Pwd в Linux (текущий рабочий каталог) от Linuxize.

Дмитрий Дементий15 мая 2020
Оцените статью
logicle.ru
Добавить комментарий