是否有任何方法或命令可以找出执行标准命令的路径?示例ls
,mkdir
,mysql
,hadoop
等。
我知道他们的起源可以从$PATH
变量中找到,并且应该可能位于/bin
个目录中。但是如何从命令运行的位置正确获取目录?
答案 0 :(得分:2)
dirname
命令返回可执行文件的完整路径,例如:
mureinik@conmputer ~ $ dirname `which mkdir`
/usr/bin
如果您确实需要该目录,则可以始终将{{1}}应用于该目录:
{{1}}
答案 1 :(得分:0)
阅读OP的问题,我注意到有针对性地排除依赖于PATH
的方法,而忽略了which
的明显答案(因为这正是它的作用)。顺便说一下,which
程序最初是一个C-shell脚本,尽管还有其他实现(例如FreeBSD和bash)。例如,Solaris的版本与4.2BSD相比变化不大,其手册页状态
别名和路径都取自用户的.cshrc文件。
如果您不使用C-shell,则which
的原始版本的用途有限。由于没有标准版本,因此系统的结果(以及工具的功能)可能会有所不同。有些shell(例如ksh
)具有相似的功能,但命名方式不同,例如whence
ksh
(bash提供ksh别名type
但不是`which
关键词)。
我没有使用/proc
,拥有更好的工具(conflict和path)。但忽略了显而易见的问题,措辞问题可能很容易提出一个更有趣的问题:应用程序如何确定运行另一个应用程序的目录。不是显而易见的“可执行文件在哪里?”,但“程序运行时的工作目录是什么?”。最近有一个类似的问题涉及相对的路径名。
在一些支持cwd
伪文件系统的系统上,有一个/proc
节点,它给出了给定进程的当前工作目录。 Find out current working directory of a running process? 这个问题详细说明了这一点。
xterm的可选功能“spawn-new-terminal”(2007年在patch #225中添加)使用此信息使新的终端实例在与用户当前 shell 工作目录。
脚本可以通过从相关命令的process-id开始,并检查cwd
树中相应的{{1}}节点来使用它。