4

ダブルクリックしてMacで次のtest.commandスクリプトを実行しようとしています。(要件:ダブルクリックで実行する必要があります

#!/bin/sh
sudo java -jar ExecutableJar.jar

これが出力です。(ターミナルは以下のメッセージで開いたままになります)

Last login: Mon Aug 13 15:59:05 on ttys001
/Applications/Application\ Folder/test.command ; exit;
code-mac:~ code$ /Applications/Application\ Folder/test.command ; exit;
Unable to access jarfile ExecutableJar.jar
logout

[Process completed]

ターミナルから同じコマンドを実行すると...

sudo java -jar ExecutableJar.jar

...正常に動作し、期待どおりに実行可能jarを開きます(パスワードの入力を求められた後)。何か案は?また、可能であれば、スクリプトでターミナルをまったく開かないようにするか、少なくとも実行可能jarの起動後にターミナルを閉じてください。

ありがとう!

4

1 に答える 1

12

スクリプトの先頭に次を追加すると、ダブルクリックしたときに期待どおりに動作しました。

cd "$(dirname "$0")"

test.commandスクリプト全体は次のとおりです。

#!/bin/sh
cd "$(dirname "$0")"
sudo java -jar ExecutableJar.jar &

sudo コマンドの最後に & を追加すると、その実行可能 jar がバックグラウンド プロセスとして実行され、sudo の後にさらにコマンドを処理できるようになります。私の場合は、ターミナル ウィンドウを閉じます。(それ以外は開いたままです)

最後に、スクリプトの最後に次のいずれかを追加すると、完了後にスクリプトが閉じます。最初のアプローチは、すべてのターミナル ウィンドウを閉じるため、少しやり過ぎですが、仕事は完了します。

killall Terminal

2 つ目は、ターミナル ウィンドウを閉じるようにユーザーに促し、ユーザーに選択肢を与えます。

osascript -e 'tell application "Terminal" to quit'

最後の重要な注意点は、どちらの閉鎖手法も私の場合には機能しないということです。私のスクリプトはsudoを必要とし、ユーザーにパスワードの入力を求めるため、ルートを使用すると、ユーザーがパスワードを入力する機会が得られる前に、ユーザーにターミナルを閉じる(osascript)か、ターミナルを閉じる(killall)ように求められます。最初にパスワードを要求してから実行可能 jar を実行するには、次を使用します。

sudo -v

必要に応じてパスワードの入力を求めるには、& を使用してバックグラウンドで実行可能 jar を実行し、killall または osascript を使用します。

于 2012-08-13T23:38:57.337 に答える