[英]Java program runs but not in bash script
我構建了一個java程序,它運行命令“jps”並查看所有JVM並通過從JPS命令的輸出中提取其id來殺死特定的JVM。 當我在ubuntu終端上運行它時工作正常。 但后來我用bash編寫了一個腳本來從其他機器ssh該機器並在那里運行該程序。
ssh $host "java -cp daemon.jar JVMname;"
現在問題來了。
Exception in thread "main" java.io.IOException: Cannot run program "jps": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) at runtime.daemon.halt.main(halt.java:19)
Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)
如果我自己去機器並運行同樣的命令就行了。 我不想切換到exec解決方案。
任何想法謝謝
這本身並不是一個Java的問題,它的下跌在這兩種情況下在你的環境的差異。 具體來說,當您以交互方式運行時, $PATH
變量包含jps
的目錄,而在后一種情況下,它不包含jps
的目錄。
看看遠程機器上的.bash_profile
和.bashrc
文件 - 我懷疑該路徑將在.bash_profile
文件中設置,該文件不會針對非登錄shell執行(例如運行單個命令的SSH調用) )。 如果在.bashrc
正確設置路徑,那么您當前的調用應該開始工作。
(注意這假設您正在為shell使用bash,盡管大多數其他shell在登錄shell和非登錄shell init文件之間有類似的區別。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.