Path
為什麼命令在其目錄中執行時不起作用?
安裝 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
(在任何目錄中)將在那裡找到執行檔。幾個解決方案:
- 始終使用執行檔的路徑
/opt/opennms/bin/runjava
,或者./runjava
如果您在/opt/opennms/bin
目錄中。- 添加
/opt/opennms/bin
到您的路徑。為此,請編輯您的 shell 初始化文件(.bash_profile
或.bashrc
forbash
)並添加該行PATH="$PATH:/opt/opennms/bin"
然後重新啟動 Cygwin 會話。 3. 創建別名:
alias runjava=/opt/opennms/runjava
這將被添加到 shell 啟動文件中。這將執行
runjava
執行檔,就像您在發出命令時輸入了完整路徑一樣runjava
。您不想添加
.
到PATH
變數中。有關這方面的討論,請參閱問題“將 . 添加到我的 PATH 是否安全?怎麼會? ”