シェルスクリプトを実行しているMacアプリケーションバンドルがあります。シェルスクリプトは、Javaプログラム1を呼び出していくつかの処理を実行してから、メインのJavaアプリケーションを起動します。このプロセスでは、シェルスクリプト用にDockに1つのアイコンが残り、アプリケーションフォルダーの名前が表示されます。Javaプログラム用にDockに1つのアイコンが残ります。
シェルスクリプトアプリケーションのアイコンがDockに表示されないようにする方法はありますか?
はい、最初の Java プログラムがヘッドレスで実行できると仮定します。
java -Djava.awt.headless=true ...
補遺: を使用している場合JavaApplicationStub
、起動プロセスからの診断出力は次のように取得できます。
$ エクスポート JAVA_LAUNCHER_VERBOSE $ ./YourBundle.app/Contents/MacOS/JavaApplicationStub
Dock にシェル スクリプト アイコンを表示したくない場合は、少なくともメイン アプリケーションの 2 番目の Java プロセスを次のexec
モードで開始する必要があります。
exec java -jar XXX
exec
つまり、現在実行中のシェルを新しいプロセスに「置き換え」ます。これはまさにあなたが望むものです。
Java 6/7用の私のuniversalJavaApplicationStubは同じ方法でそれを行っており、うまく動作します:)
たぶん、Javaプログラムをバックグラウンドで実行してから、シェルスクリプトを終了することができますか?このようなもの:
#!/bin/sh
first_java_program # Synchronous, wait for it
nohup second_java_program & # Run in the background, detach from terminal
exit 0 # Indicate clean exit
もう1つのオプションは、Terminal.appを使用せずに、GUIを操作せずにUnixレベルのsystem(3)呼び出しなどを使用して、シェルスクリプトを直接実行することです。