这是ls -all
命令的输出:
-rwxr----- 1 subhrcho dba 3600 Nov 13 17:26 jdev
-rw-r----- 1 subhrcho dba 1566 Nov 13 17:26 jdev-Darwin.conf
-rw-r----- 1 subhrcho dba 347 Mar 6 2009 jdev-debug.boot
-rw-r----- 1 subhrcho dba 821 Nov 13 17:26 jdev-logging-debug.conf
-rw-r----- 1 subhrcho dba 584 Nov 13 17:26 jdev-logging.conf
-rw-r----- 1 subhrcho dba 4717 Jul 31 16:09 jdev.boot
-rw-r----- 1 subhrcho dba 12877 Nov 13 17:26 jdev.common
-rw-r----- 1 subhrcho dba 5047 Dec 6 01:43 jdev.conf
-rwxr-x--- 1 subhrcho dba 28160 Nov 13 16:28 jdev.exe
-rwxr-x--- 1 subhrcho dba 28672 Nov 13 16:28 jdev64.exe
-rwxr-x--- 1 subhrcho dba 28672 Nov 13 16:28 jdev64W.exe
-rwxr-x--- 1 subhrcho dba 28160 Nov 13 16:28 jdevW.exe
Run Code Online (Sandbox Code Playgroud)
现在,当我运行jdev
它运行不同版本的甲骨文JDveloper当我运行它比./jdev
..Why会这样呢?
Pat*_*ryk 20
当您运行可执行文件(或者更确切地说是在 unix/linux 世界中 - 具有可执行权限/标志的文件)时,如下所示:
$ ./jdev
然后标记为.
要在工作目录(您当前所在的目录)中运行一个文件,该文件已命名jdev
并且对启动它的用户具有可执行权限(您必须注意它仍然可以是指向其他文件,您可以通过ls -l jdev
在终端中键入来检查)
当你运行它时
$ jdev
那么很可能jdev
在系统上的某个地方安装了它并且您将其安装在$PATH
(例如/usr/bin/
或/bin/
或/usr/local/bin/
)
正如peterph所说:您可以使用which
to 指向正在使用特定命令启动的可执行文件,例如:
$ which find
/usr/bin/find
Run Code Online (Sandbox Code Playgroud)
如果您在 shell 中调用名称中没有斜线的命令,则会在 shell 别名、函数和$PATH
环境变量中提供的路径列表中查找该命令。(请注意,您可以在 中拥有当前工作目录(指定为.
或空字符串)或任何相关目录$PATH
,但出于安全原因,不建议这样做)。
如果名称中有斜杠,则不会发生这种情况,名称将作为执行命令的路径(尽管某些 shellzsh
允许别名或函数在其名称中包含斜杠,然后优先)。
因此,如果您想运行foo
当前工作目录中名为的命令,您必须想出一个包含斜杠的名称。./foo
是最明显的。您也可以使用完整路径,或者../dir/foo
...
要知道 shell 将运行什么,请使用该type
命令。不要使用which
通常不会做你认为它会做的事情的命令,csh
并且是最好不要管它的遗产。