我面臨一個奇怪的問題,我有一個Java程序,它調用netbeans中的shell腳本。 shell腳本應該在腳本運行的同一目錄中創建一個文件。但在這種情況下,輸出文件正在NetBeans(工作流)文件夾中創建。Shell腳本輸出在不同的目錄中
任何人都可以讓我知道我哪裏錯了。我不能改變腳本,因爲它是動態的。
注:如果我運行命令類提示文件腳本目錄本身被創建,問題是當我在NetBeans中運行
感謝所有幫助
我面臨一個奇怪的問題,我有一個Java程序,它調用netbeans中的shell腳本。 shell腳本應該在腳本運行的同一目錄中創建一個文件。但在這種情況下,輸出文件正在NetBeans(工作流)文件夾中創建。Shell腳本輸出在不同的目錄中
任何人都可以讓我知道我哪裏錯了。我不能改變腳本,因爲它是動態的。
注:如果我運行命令類提示文件腳本目錄本身被創建,問題是當我在NetBeans中運行
感謝所有幫助
請看下面的代碼:
#!/bin/sh
echo "hi" > hello.txt
當這個腳本運行後,將創建在當前目錄了「hello.txt的」文件。
那麼什麼是當前目錄?那麼這取決於你如何運行腳本。
如果您只是從shell提示符運行腳本,那麼當前目錄將是shell的當前目錄;即您cd到的地方。
如果您運行Java程序並使用Runtime.exec()
來運行該腳本,那麼該腳本的當前目錄將是Java程序的當前目錄。
當從shell命令提示符(例如java -cp ... SomeClass
)啓動Java程序時,它的當前目錄將是shell當前目錄。
從IDE啓動Java程序時,Java程序的當前目錄由IDE Java啓動程序決定。 IDE(例如NetBeans,Eclipse)通常會將項目目錄作爲啓動的Java程序的當前目錄。
所以,這就是正在發生的事情。你應該怎麼做呢?
正如Tim Bender所建議的,您可以使用ProcessBuilder,並將子進程的當前目錄設置爲所需的目錄。但這意味着您的Java程序需要知道正確的目錄是什麼。
您可以更改腳本以使用輸出文件的絕對路徑名。但這意味着正確的目錄必須「連線」到腳本中。
最好的解決方案(IMO)是讓Java程序和腳本獨立,並更改IDE的Java啓動程序配置,以使啓動的程序的當前目錄更適合(用於測試)。
或者,使輸出目錄成爲Java程序的命令行參數(或配置文件條目),並讓它將參數值傳遞給shell腳本。
你介意發佈有問題的代碼嗎?聽起來像是我的相對路徑問題。 – timgeb