Чому pwd не приймає довгі варіанти, наприклад --фізичні?


11

Коли я показую посібник з pwdкоманди, він говорить, що довгі параметри на зразок --physicalпідтримуються

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

Однак він не вдається, коли я набираю таке

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Чому довгі варіанти для мене не працюють?

Я використовую RHEL 6.4. Псевдонім для pwd не налаштований. Схоже, це стандартний pwd:

$ which pwd
/bin/pwd

1
Сторінка керівництва призначена для окремої утиліти, яка не є частиною bash.
Томас Дікі

7
Використовуйте typeзамість which, оскільки whichпоказує лише команди, тоді як typeпоказує ключові слова, вбудовані псевдоніми, функції та команди (та хешовані командні шляхи). Докладніше див. Чому б не використовувати "який"? Що тоді використовувати?
wjandrea

1
У моїй системі man pwdє така примітка: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsвнизу DESCRIPTIONрозділу.
Нікакін

Відповіді:


26

bashмає вбудовану команду, pwdяку ви використовуєте, коли просто набираєте pwdсвою оболонку.

Щоб отримати так, pwdяк описано в manpage, вам потрібно примусово використовувати зовнішню команду. Це можна зробити, вказавши повний шлях до виконуваного файлу ( /bin/pwdу вашому випадку) або попередньо envперед рядком:, env pwdякий запускає envкоманду, яка може бути використана для додавання налаштувань до середовища (але що тут не робиться), а потім envзапускається вказана команда. Оскільки envнемає вбудованого pwd, /bin/pwdвиконується "справжній" .

Перевага вбудованого pwdв bash полягає в тому, що він bashвідслідковує поточний каталог, тому отримання значення дорівнює нулю, тоді як зовнішня команда потребує пошуку по файловій системі для визначення шляху, який значно інтенсивніший IO.


4
Так не працює зовнішня команда. unix.stackexchange.com/a/413225/5132
JdeBP

BTW: Ви також можете вимкнути вбудовану оболонку (принаймні в баш)enable -n pwd
derobert

@JdeBP Востаннє я дивився (давно :-)); і хоча тепер він використовує getcwd()системний виклик, ядро ​​все ще обходить файлову систему, що простіше зробити в просторі ядра через доступ до відповідних структур даних, оскільки пов'язана відповідь зазначає: "Однак зауважте, що навіть у FreeBSD та інших операційних системи ядро ​​не відслідковує робочий каталог за допомогою рядка. "
wurtel

11

Ця сторінка manpage документи /bin/pwd, але під час запуску pwdви використовуєте вбудовану оболонку; див. вихід

type pwd

Вбудована оболонка pwdне підтримує довгих параметрів (див. Документацію оболонки; оскільки ви використовуєте Bash, help pwdнадаватимете підсумки).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.