我有一個shell腳本,我試圖從Java調用。 shell腳本包含:使用Java運行.sh與
cat /dev/tty.USB0 > file.txt
在我的Java代碼,我使用:
Process p= Runtime.getRuntime().exec("/home/myname/Scrivania/capture.sh");
但它不工作。當我從終端運行它時,它按預期工作。
我有一個shell腳本,我試圖從Java調用。 shell腳本包含:使用Java運行.sh與
cat /dev/tty.USB0 > file.txt
在我的Java代碼,我使用:
Process p= Runtime.getRuntime().exec("/home/myname/Scrivania/capture.sh");
但它不工作。當我從終端運行它時,它按預期工作。
您不能直接執行.sh
這樣的腳本,因爲它不是可執行文件。相反,您必須運行/bin/sh -c /home/myname/Scrivania/capture.sh
。
首先,在Java代碼中使用基於OS的功能並不是一種好的風格。相反,我建議你只使用系統輸入/輸出流。例如,如果你的程序應該處理腳本的輸出,你可以這樣做:
cat /dev/tty.USB0 > java YourMainClass
,然後用System.in
直接合作。
即使您的程序比腳本輸出消費者更復雜,您可以重寫它以從程序中刪除所有基於操作系統的部分,它會使您的代碼更加穩定和可維護。
你在做什麼工作。那麼,它應該。
我對什麼是/看起來錯誤的猜測是:你可能在錯誤的地方尋找輸出文件「file.txt」。
這裏有一個小實驗
System.out.println("Output file - " + new File("file.txt"));
Process p= Runtime.getRuntime().exec("/home/myname/Scrivania/capture.sh");
第一行會告訴你到哪裏尋找你的文件。
P.S.當然,請記得導入java.io.File :)
可能重複[如何從java代碼運行Unix shell腳本?](http://stackoverflow.com/questions/525212/how-to-run -unix殼腳本從 - Java的代碼) –