Когда я отображаю руководство для 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
type
вместоwhich
, посколькуwhich
только показывает команды, аtype
показывает ключевые слова, встроенные функции, псевдонимы, функции и команды (и хэшированные пути команд). Для более подробной информации смотрите Почему бы не использовать «который»? Что использовать тогда?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
раздела.Ответы:
bash
имеет встроенную команду,pwd
которую вы используете, когда вы просто печатаетеpwd
в своей оболочке.Чтобы получить,
pwd
как описано в man-странице, вам необходимо принудительное использование внешней команды. Вы можете сделать это, указав полный путь к исполняемому файлу (/bin/pwd
в вашем случае) или добавивenv
перед строкой:,env pwd
которая запускаетenv
команду, которую можно использовать для добавления настроек в среду (но здесь это не делается), а затемenv
запускает указанная команда. Посколькуenv
не имеет встроенной функцииpwd
, «реальное»/bin/pwd
выполняется.Преимущество встроенного
pwd
в bash заключается в том, что онbash
отслеживает текущий каталог, поэтому получение значения обходится без затрат, в то время как внешней команде необходимо искать в файловой системе, чтобы определить путь, который требует гораздо больше операций ввода-вывода.источник
enable -n pwd
getcwd()
системный вызов, ядро по-прежнему пересекает файловую систему, что легче сделать в пространстве ядра благодаря доступу к соответствующим структурам данных, как говорится в связанном ответе: «Однако обратите внимание, что даже во FreeBSD и других работающих систем ядро не отслеживает рабочий каталог со строкой. "Эта man-страница документирует
/bin/pwd
, но при запускеpwd
вы используете встроенную оболочку; увидеть выводВстроенная в вашу оболочку
pwd
не поддерживает длинные опции (см. Документацию вашей оболочки; поскольку вы используете Bash,help pwd
предоставьте сводку).источник