Чому 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.