2011-10-30 28 views
1

Javaプログラムからシェルスクリプトを実行しようとしましたが、スクリプト全体が実行されていません。なぜこのような問題が起こるのか?Javaプログラムから実行されたスクリプトの一部だけ

シェルスクリプトを実行するためのJavaコード:

File file = new File("/path/to/script"); 
String COMMAND= "./run"; 
ProcessBuilder p = new ProcessBuilder(COMMAND); 
p.directory(file); 
try { 
    Process startProcess= p.start(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

にスクリプトが正常に実行ではなく、全体のスクリプトが実行されます。 1行目だけが実行されているようです。

+0

スクリプトの最初の行は何ですか?最初の行だけが実行されていますか? – Mat

+0

[ProcessBuilderを使用してJavaからプログラムを起動できません](http://stackoverflow.com/questions/1043611/failure-to-start-program-from-java-using-processbuilder) – trashgod

+0

私はこの問題について聞き、上のようなコードを見て、[Runtime.exec()ができないとき]のヒントを読んで実装することを勧めます。(http://www.javaworld.com/javaworld/jw- 12-2000/jw-1229-traps.html)。例えば、 'Process'の' System.out'/'err'を消費して(そして何らかの形で報告して)、例えば照らしているかもしれません(実際は問題の根)。 –

答えて

1

スクリプトが実行を開始することが確実であれば、問題はJavaではなくスクリプト自体にあります。

違いの理由は、誤ったパスまたは間違った環境である可能性があります。コンソールからスクリプトを実行するときは、ユーザーの環境にあるため、スクリプトはすべての環境変数を使用できます。

いくつかのデバッグ出力を追加して、問題を把握してください。

+0

こんにちは、 ubuntuのターミナルでスクリプトを実行すると、スクリプトはうまく動作します。しかし、同じスクリプトはjavaプログラムから完全には実行されません。スクリプトにはいくつかのtinyosコマンドがあります。 tinyosコマンドで 'make'を使ってスクリプトを実行しようとしたときも同じ問題がありました。おかげさまで – Ashish

+0

あなたのPATHがあなたの端末の設定で一方的な方法で設定されていることと、あなたのJava環境とは異なっていることはほぼ確実です。 AlexRによると、スクリプトにデバッグメッセージを追加するか、スクリプトで実行しているすべてのコマンドにフルパスプレフィックスを追加します。がんばろう。 – shellter

+0

こんにちは、パスに問題はありません、私は、問題は環境変数だと思います。実行されていないスクリプト部分は次のとおりです。 if cygpath -w />/dev/null 2>/dev/null;その後、 CLASSPATH = "oscilloscope.jar; $ CLASSPATH" 他 CLASSPATH =:ときにスクリプト "oscilloscope.jarの$ CLASSPATH" Fiの javaのオシロスコープ さらに、エコー...スクリプト内の任意の出力を与えるものではありませんJavaプログラムから実行されます。ターミナルからスクリプトを実行すると、出力が表示されます。 アッシュ。 – Ashish

関連する問題