如何找出执行unix命令的位置?

时间:2015-05-18 22:14:49

标签: unix command exec

是否有任何方法或命令可以找出执行标准命令的路径?示例lsmkdirmysqlhadoop等。

我知道他们的起源可以从$PATH变量中找到,并且应该可能位于/bin个目录中。但是如何从命令运行的位置正确获取目录?

2 个答案:

答案 0 :(得分:2)

dirname命令返回可执行文件的完整路径,例如:

mureinik@conmputer ~ $ dirname `which mkdir`
/usr/bin

如果您确实需要该目录,则可以始终将{{1}}应用于该目录:

{{1}}

答案 1 :(得分:0)

阅读OP的问题,我注意到有针对性地排除依赖于PATH的方法,而忽略了which的明显答案(因为这正是它的作用)。顺便说一下,which程序最初是一个C-shell脚本,尽管还有其他实现(例如FreeBSDbash)。例如,Solaris的版本与4.2BSD相比变化不大,其手册页状态

  

别名和路径都取自用户的.cshrc文件。

如果您不使用C-shell,则which的原始版本的用途有限。由于没有标准版本,因此系统的结果(以及工具的功能)可能会有所不同。有些shell(例如ksh)具有相似的功能,但命名方式不同,例如whence ksh(bash提供ksh别名type但不是`which关键词)。

我没有使用/proc,拥有更好的工具(conflictpath)。但忽略了显而易见的问题,措辞问题可能很容易提出一个更有趣的问题:应用程序如何确定运行另一个应用程序的目录。不是显而易见的“可执行文件在哪里?”,但“程序运行时的工作目录是什么?”。最近有一个类似的问题涉及相对的路径名。

在一些支持cwd伪文件系统的系统上,有一个/proc节点,它给出了给定进程的当前工作目录。 Find out current working directory of a running process? 这个问题详细说明了这一点。

xterm的可选功能“spawn-new-terminal”(2007年在patch #225中添加)使用此信息使新的终端实例在与用户当前 shell 工作目录。

脚本可以通过从相关命令的process-id开始,并检查cwd树中相应的{{1}}节点来使用它。