为什么pwd不接受--physical之类的长选项?


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配置别名。看起来是标准的密码:

$ which pwd
/bin/pwd

1
手册页适用于不属于bash的独立实用程序。
Thomas Dickey

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节的底部。
Nykakin

Answers:


26

bash有一个内置命令pwd,当您简单地键入pwd您的shell 时,这就是您要使用的命令。

要获得pwd联机帮助页中所述的内容,您需要强制使用外部命令。您可以通过指定可执行文件的完整路径来完成此操作(/bin/pwd在您的情况下),也可以env在行:之前添加前缀:env pwd这将启动env可用于向环境中添加设置的命令(但此处未完成),然后env启动指定的命令。由于env没有内置函数pwd,因此/bin/pwd将执行“真实” 。

pwdbash 内置的优点是bash可以跟踪当前目录,因此获取值的成本为零,而外部命令则需要在文件系统中进行搜索以确定路径,这是IO密集型工作。


4
这不是外部命令的实际工作方式。 unix.stackexchange.com/a/413225/5132
JdeBP

顺便说一句:您还可以通过enable -n pwd
derobert

@JdeBP曾经是我上次看(很久以前:-));尽管现在它使用getcwd()系统调用,但内核仍然遍历文件系统,由于访问相关的数据结构,在内核空间中更容易做到这一点。如链接的答案所述:“但是,请注意,即使在FreeBSD和其他运行中系统内核不使用字符串跟踪工作目录。”
wurtel

11

该手册页提供了文档/bin/pwd,但是运行时pwd使用的是内置的shell;看到输出

type pwd

Shell的内置组件pwd不支持长选项(请参阅Shell的文档;由于您使用的是Bash,help pwd将提供摘要)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.