新しいコンソール ウィンドウでプロセスを開始する必要があります。Mac の場合、次のようなものを見つけました。実行するコマンドが文字列として渡される新しい Mac OS X ターミナル ウィンドウでコマンドを実行します。
そこで、文字列のリストを指定すると (プロセス ビルダーのように)、指定されたコマンドを新しいコンソール ウィンドウで実行する文字列のリスト (最終コマンド) を返すメソッドを作成しました。指定された文字列にスペースを追加することはできますが、これはほとんどの場合うまくいきますが、どうすれば適切にエスケープできますか? たとえば、プロセスビルダーを渡すことができ、new String[] { "echo", "hello world" }
実際にはecho "hello world"
. そして、それは他の多くのケースも扱っています(と思います)。
説明が複雑だと思うので、ここに疑似スタブを示します。
public static String[] getConsoleCommand(String[] command) {
if operating system is Mac...
String commandString = concatenate command...
return new String[] { "osascript", "-e",
String.format("'tell application \"Terminal\" to do script \"%s\"'",
commandString.replace("'", "\\\'")) // escape single quote used in 'tell application...'
};
}