2014-05-24 45 views
0

我面臨一個奇怪的問題,我有一個Java程序,它調用netbeans中的shell腳本。 shell腳本應該在腳本運行的同一目錄中創建一個文件。但在這種情況下,輸出文件正在NetBeans(工作流)文件夾中創建。Shell腳本輸出在不同的目錄中

任何人都可以讓我知道我哪裏錯了。我不能改變腳本,因爲它是動態的。

注:如果我運行命令類提示文件腳本目錄本身被創建,問題是當我在NetBeans中運行

感謝所有幫助

+0

你介意發佈有問題的代碼嗎?聽起來像是我的相對路徑問題。 – timgeb

回答

1

使用ProcessBuilder並調用directory(File)設置適當的工作目錄。

+0

就這麼簡單!感謝添工作:) – Raaghu

0

請看下面的代碼:

#!/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腳本。