Path

為什麼命令在其目錄中執行時不起作用?

  • June 15, 2018

安裝 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 如果有幫助,輸出為綠色 …

因為.不是您的$PATH. Unix 只會在$PATH.

此外,.進入$PATH是一個安全風險,所以不要這樣做。

您的$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變數中。有關這方面的討論,請參閱問題“將 . 添加到我的 PATH 是否安全?怎麼會?

引用自:https://unix.stackexchange.com/questions/393856