web-dev-qa-db-ja.com

端末の終了時にアプリケーションが閉じられないようにします

アプリケーションを起動するbashスクリプトを作成しました。アプリケーションの起動時にターミナルウィンドウを閉じたいので、次の行を使用しました。

firefox & 2> /dev/null; exit;

コマンドラインからスクリプトを開始する限り、正常に機能します。ただし、デスクトップローダーから起動すると、アプリケーションだけでなく端末も閉じます。誰でもこれがなぜなのか説明できますか。 Ubuntu 10.10を使用しています。

以下を使用するだけで:

    Nohup firefox

できます。しかし、可能であれば、デスクトップランチャーから起動したときに元のバージョンが機能しない理由についての説明が必要です。

3
Lars

解決策は、パイプで正しいフォームを使用することです。

firefox > /dev/null 2>&1
exit

これは、端末とデスクトップランチャーの両方から機能します。 Nohupを使用する必要はありません。

6
Lars

Nohup-commandを試してください:

Nohup firefox & 2> /dev/null; exit;

Nohupは、実行中のジョブをターミナルセッションから切断し、終了時に閉じられないようにします。

ただし、firefoxを起動するだけの場合は、そのショートカットを作成するだけで、bashスクリプトは不要です。

さらに説明として:ターミナルからスクリプトを実行し、firefoxウィンドウを開いたままにして、スクリプトを実行したターミナルを閉じます。 Firefoxは、それが開始されたターミナルセッションの子プロセスであると同時に終了します。

5
Michael K

私のために働いた解決策は、スクリプトに1秒のスリープを入れることです。

Gnomeデスクトップランチャー経由で実行しようとしていたスクリプトの最小限の例を次に示します。

#!/bin/bash
echo "test"
read e

Nohup firefox & 2> /dev/null
exit

これは、端末内から開始した場合、つまり次のように正常に機能します。

  1. 「test」と表示され、Enterを押すとfirefoxが起動します
  2. firefoxはターミナルを閉じても生き続けます

ただし、次を使用してデスクトップランチャーから起動する場合:

gnome-terminal -e "script"

端末に「テスト」と表示され、Enterキーを押すとシャットダウンします(firefoxが表示されることはありません。端末で強制終了されると思われます)。

ただし、ランチャーで次の作業が開始されました。

#!/bin/bash
echo "test"
read e

Nohup firefox & 2> /dev/null
sleep 1
exit

この場合、FirefoxはEnterキーを押した後に起動し、スリープ時間後に端末がシャットダウンした(またはスリープ時間中に閉じた)ときに生き続けます。

0
dom