为什么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.