为什么命令在其目录中运行时不起作用?

为什么命令在其目录中运行时不起作用?

安装 OpenNMS 时遇到了一些困难。问题已解决,但它让我想知道......

为什么这不起作用:

[nac@localhost /]$ cd opt/opennms/bin/
[nac@localhost bin]$ runjava -s
-bash: runjava: command not found

...但这确实:

[nac@localhost /]$ opt/opennms/bin/runjava -s
runjava: Looking for an appropriate JRE...
runjava: Checking for an appropriate JRE in JAVA_HOME...
runjava: skipping... JAVA_HOME not set
runjava: Checking JRE in user's path: "/usr/bin/java"...
runjava: found an appropriate JRE in user's path: "/usr/bin/java"

我正在使用cygwin。 ssh 进入 Fedora 盒子。如果有帮助的话输出是绿色的 ls /opt/opennms/bin ......

答案1

您的$PATH不包含当前目录..因此,runjava当您尝试在没有路径的情况下执行位于其目录中的可执行文件时,将找不到该可执行文件。

它也不包含/opt/opennms/bin.如果完成了,键入runjava(在任何目录中)就会在那里找到可执行文件。

几个解决方案:

  1. 始终使用可执行文件的路径/opt/opennms/bin/runjava,或者./runjava如果您位于/opt/opennms/bin目录中。
  2. 添加/opt/opennms/bin到您的路径。为此,请编辑 shell 初始化文件(.bash_profile.bashrcfor bash)并添加以下行

    PATH="$PATH:/opt/opennms/bin"
    

    然后重新启动 Cygwin 会话。

  3. 创建别名:

    alias runjava=/opt/opennms/runjava
    

    这将被添加到 shell 启动文件中。这将运行runjava可执行文件,就好像您在发出命令时键入了它的完整路径一样runjava

您不想添加.PATH变量中。有关此问题的讨论,请参阅问题“添加 . 是否安全?我的路径?怎么会?

答案2

因为.不是你的一部分$PATH。 Unix 将仅在 .txt 中列出的目录中搜索可执行程序$PATH

此外,存在.安全$PATH风险,所以不要这样做。

相关内容