OSXでCMD相当を実行しますか?
質問
私は私のJavaプログラムが(可視)CMDウィンドウを開き作るために、このコードを使用しています:
try {
String line;
Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\"");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
jLabel7.setText(line);
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
私は今のよ。ここで、と私はOSXの端末と同じことをやろうとしてきた、これは、次のとおりです。
try {
String line;
Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
jLabel7.setText(line);
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
これまでのところ、運:(任意の提案ですか?.SHファイルも実行されていない...
解決
私はちょうどあなたのシェルスクリプトは、上のビットを実行し、ちょうどシェルスクリプトのファイル名を渡していることを確認します。
Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")
の編集の
実行ビットまたはどのように引用符をエスケープするを設定することでのUnix / Linux用のファイルのパーミッションを設定し、とにかくがある場合は、私は、特にJavaのか分かりません。しかし、それはこのようなものになるだろう。
Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")
他のヒント
この作業をする必要があります。だけでなく、スクリプトを実行するだけでなく、ターミナルを開いてます:
Process p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");
、あなたは直接シェルを実行することはできません。あなたは、ターミナルを起動してから.commandファイルではなく、シェルスクリプトを実行する必要があります。私はそれがあなたのJavaプロセスにそのコマンドの標準出力を接続することがいかに難しいかわかりません。あなたは、端末への出力を得るための他のいくつかの方法を把握する必要がある場合があります。
ちなみに、私は自宅で自分のMac上のクラスで、あなたのコードを試みたが、それだけで罰金.SHファイルを実行しました。私は、コマンドラインからJavaクラスを実行していました。たぶん、shがちょうどあなたのPATHにありません。
私は、あなたは、あなたが.SHファイルが実行可能であることをチェックしましたしていないと仮定?
私はあなたが標準出力と標準エラーの同様のをキャプチャし、それをダンプお勧めすることができます。 (それは良い練習が一般的だ)何が起こっているのかに関して、それはあなたにいくつかのアイデアを与える必要があります。
あなたは問題がブロックを回避するために別のスレッドで、標準出力と標準エラー出力を収集する必要があるかもしれません。 StreamGobbler