2012-02-23 54 views
1

私はシェルスクリプトをjavaとcygwin。私はWindows XPでコードを実行しているときはうまく動作します。今私は上記のエラーが発生しているWindows 7で同じコードを実行しようとしています。このエラーoccurred.Iが、これを避けるためにどのようにcygwinの(PATH=.;c:\cygwin\bin)のための私のパスを設定しているのはなぜjava.io.IOException:プログラム "sh"を実行できません(ディレクトリ "c: cygwin bin test"):CreateProcess error = 2.システムが指定されたファイルを見つけることができません

(java.io.IOException)java.io.IOException: 
Cannot run program "sh" (in directory"c:\cygwin\bin\test"): 
CreateProcess error=2.The system cannot find file specified 

ProcessBuilder pb = new ProcessBuilder(); 
pb.directory(new File("C:\\cygwin\\bin\\Test\\")); 
File shellfile = new File("app.sh");//File name with extension 
System.out.println(shellfile.getCanonicalPath()); 

しかし、これは私のJavaプログラムにあるE:\NIRAJ\example\app.shという出力を与えています。私はパスにpb.directoryを設定しています。

を私はあまりわかりませんが、これは一歩先あなたを導く可能性があります:私はSystem.out.print(pb.directory());をチェックすると

は、それは私が出力C:\cygwin\bin\Test

+0

iを管理者権限で実行してみます。管理者権限でコマンドラインを起動し、コマンドラインからjavaを実行します(またはIDEで権限を起動してください) – Hurda

+0

testはあなたのファイルまたはディレクトリですか? – Ved

+0

@ testmer_1:テストは私のディレクトリです。このディレクトリ内にapp.shはシェルスクリプトファイル –

答えて

0

まず最初にそれを確実にするために、指定したファイルのパスを取得しようとなります

File file = new File("app.sh");//File name with extension 
System.out.println(file.getCanonicalPath()); 

これは印刷する必要があります:c:\cygwin\bin\test はまた、代わりに次のように区切り文字を使用します。c:\\cygwin\\bin\\test

希望します。

UPDATE

String myCommand = "c:\\cygwin\\bin\\test\\cygbin"; 
String myArg = PATH_TO_shellscript+"app.sh"; 
ProcessBuilder p = new ProcessBuilder(myCommand, myArg).start(); 
+0

私の質問が更新されました... –

+0

app.shがexampleディレクトリにあり、あなたはそれを期待してテストですか?またcygbin.exeで以下のコマンドを実行するべきです: 'cygbin.exe PATH/app.sh' cygbinがあなたの実行ファイルであると仮定します。 – Ved

+0

更新された回答があれば見てください。 – Ved

0

あなたはどのWindowsパス宣言の前にPATH環境変数にはcygwinのbinディレクトリを追加する必要があります。

PATH=c:\cygwin\bin:RestWindowsPathVariables 
関連する問題