javafxのアプリケーションで作業していますが、ターミナルでコマンドを使用してアプリケーションを開こうとしています。私のjavaコードを使用してコマンドを実行しています。ビルダーが更新されるときにファイル名が異なる可能性があるため、常に同じではないインストーラファイルの名前です。
ここに私が実行している正確なコマンドではないが、コマンドフォーマットは同じであるというコマンドをどのように実行しているかのサンプルがあります。JavaでOS Xのsudoコマンドを実行するには
Process process = Runtime.getRuntime().exec("echo password | sudo -S open -a safari");
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
このプロセスでは出力が停止し、何も起こりません。 私は同じコマンドをターミナルから試してみましたが、うまくいきます。
は、私は物事がこのリンク
How to execute bash command with sudo privileges in Java?
に言及しようとしたが、それはまた働いていませんでした。
私はまた、これらのコマンドがうまく動作する私のJavaコードから "chmod + x"のようなコマンドを実行しています。 私の元のコマンドは次のようになります - )a.getAbsolutePathは()インストーラファイルとb.getAbsolutePath(のパスです
runCommand = "echo" + " " + password + "| sudo -S " + "\"" + a.getAbsolutePath() + "\"" + " --deploymentFile="
+ "\"" + b.getAbsolutePath() + "\"";
我々はアプリケーションをインストールするために使用される配布ファイルのパスです。
pb.getInputStream()
は、コマンドを印刷し、私はコピーして貼り付けるとき、正常に動作の端末です。
pb.getErrorStream()
は何も与えません。
私はここに私はエラー
getErrorStreamusage: sudo -h | -K | -k | -L | -V
getErrorStreamusage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
getErrorStreamusage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u
getErrorStream user name|#uid] [-g groupname|#gid] [command]
getErrorStreamusage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]
getErrorStreamusage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] file ...
なぜ 'echo tester'を実行しますか?また、 '-S'は必要ありません。単純な' sudo open -a safari'で十分です。 – fedorqui
実際にテスターはシステムのパスワードです、私はパスワードでコマンドを実行する必要があります。 sudoにはパスワードが必要ではありません。 – user3649361
'tester'がパスワードであれば、' echo'はアイデアの中で最も安全なものではないかもしれません... – Arc676