Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到执行unix命令的位置?_Unix_Command_Exec - Fatal编程技术网

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

如何找到执行unix命令的位置?,unix,command,exec,Unix,Command,Exec,是否有任何方法或命令可以找到执行标准命令的路径?例如ls,mkdir,mysql,hadoop,等等 我知道它们的来源可以从$PATH变量中找到,可能应该在/bin目录中。但是如何才能从命令运行的位置正确获取目录?该命令返回可执行文件的完整路径,例如: mureinik@comupter ~ $ which mkdir /usr/bin/mkdir 如果您确实需要目录,您可以始终对其应用dirname: mureinik@conmputer ~ $ dirname `which mkdir`

是否有任何方法或命令可以找到执行标准命令的路径?例如
ls
mkdir
mysql
hadoop
,等等


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

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

mureinik@comupter ~ $ which mkdir
/usr/bin/mkdir
如果您确实需要目录,您可以始终对其应用
dirname

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

在阅读OP的问题时,我注意到有针对性地排除了依赖于
路径的方法,而忽略了
哪个
的明显答案(因为这正是它所做的)。顺便说一句,
程序最初是一个C-shell脚本,尽管还有其他实现(,和),例如,它的一个版本有一点变化,它的手动页面状态是

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

如果您不使用C-shell,那么
的原始版本用处有限。由于没有标准版本,结果(以及工具的功能)可能因系统而异。一些shell(例如
ksh
)具有类似的功能,但命名方式不同,例如
ksh
(bash提供ksh别名
类型
,但不提供“whence关键字”)

我不经常使用
,因为我有更好的工具(和)。但是在忽略了显而易见的问题之后,这个用词表达的问题很容易提出一个更有趣的问题:应用程序如何确定运行另一个应用程序的目录。不是明显的“可执行文件在哪里?”,而是“程序运行时的工作目录是什么?”。最近在处理相对路径名时也遇到了类似的问题

在一些支持
/proc
伪文件系统的系统上,有一个
cwd
节点,它提供给定进程的当前工作目录。关于这一点,这个问题有一些细节

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


脚本可以使用它,方法是从相关命令的进程id开始,并检查相应的
cwd
节点的
/proc
树。

感谢Mureinik的快速回答。…)对不起,我试着投赞成票,但它给了我一个-1,我无法回滚,它说我需要15个声誉。我发现您的答案很有用,因此请求stackoverflow团队删除-1并将其更改为+1@anna如果这解决了您的问题,您可以通过投票按钮将答案标记为已接受(下面的复选标记)。@anna如果这个答案真的对您有帮助,您应该没有足够的声誉来删除否决票并添加否决票。