アプリケーションが開いたら、ターミナルウィンドウを閉じます。

アプリケーションが開いたら、ターミナルウィンドウを閉じます。

アプリケーションをロードした後、親端末ウィンドウを閉じることはできますか?

正しく機能するには、権限を使用して実行する必要があるプログラムがあります。現在ユーザーがいることを確認し、そうでない場合は、アプリを読み込む前にパスワードを確認するように要求するrootスクリプトファイルを作成しました。rootroot

オリジナル

私のスクリプトファイルの内容は次のとおりです。

#!/bin/bash
if [ "$EUID" -ne 0 ]
  then 
    echo "You need root privileges to run this utility"
    echo "Do you want to continue? (y/n):"
    read userInput
    
    if [ $userInput == "y" ] || [ $userInput == "Y" ]
      then 
        sudo ./myGuiProgram
      exit
    elif [ $userInput == "n" ] || [ $userInput == "N" ]
      then
        echo "Exiting now..." 
      exit 
    fi
  exit
elif [ "$EUID" -eq 0 ]
  then
    ./myGuiProgram 
  exit
fi

ターミナルウィンドウを閉じる代わりにターミナルウィンドウを閉じるように追加できるものはありますかmyGuiProgram

私のCentos 7コンピュータには、順番に実行されるスクリプトファイルを実行するデスクトッププロファイルがあります。myGuiProgram

2回目の試み

それ以来、スクリプトを修正しましたが、まだ成功していませんでした。この方法では、プログラムを閉じずにターミナルウィンドウを手動で終了できます。

#!/bin/bash
if [ "$EUID" -ne 0 ]
  then 
    echo "You need root privileges to run this utility"
    echo "Do you want to continue? (y/n):"
    read userInput
    
    if [ $userInput == "y" ] || [ $userInput == "Y" ]
      then 
        sudo nohup ./myGuiProgram > /dev/null & disown && kill $PPID
    elif [ $userInput == "n" ] || [ $userInput == "N" ]
      then
        echo "Exiting now..."  
    fi
elif [ "$EUID" -eq 0 ]
  then
    nohup ./myGuiProgram > /dev/null & disown && kill $PPID
fi

MARco作業ソリューション

@MARco 応答に基づく新しい変更です。この方法は非常に効果的です。

#!/bin/bash
if [ "$EUID" -ne 0 ]
  then 
    echo "You need root privileges to run this utility"
    echo "Do you want to continue? (y/n):"
    read userInput
    
    if [ $userInput == "y" ] || [ $userInput == "Y" ]
      then 
        sudo -b nohup ./myGuiProgram 2>&1> /dev/null
    elif [ $userInput == "n" ] || [ $userInput == "N" ]
      then
        echo "Exiting now..."
        sleep 1
        exit 0
    fi
elif [ "$EUID" -eq 0 ]
  then
    nohup ./myGuiProgram > /dev/null 2>&1> /dev/null & 
fi
kill $(ps -ho ppid -p $(ps -ho ppid -p $$))

ベストアンサー1

通常、GUIを起動できますプログラムそしてそれを開始したxtermをすぐに閉じます。

exec プログラム&exit

またはより良い

exec プログラム2>&1>/dev/null &exit

端末から入力を受け取るスクリプトがあるため、端末をすぐに終了する必要がないため、解決策は次のとおりです。

  1. ./myGuiProgram使用。 。 。交換nohup ./myGuiProgram 2>&1>/dev/null &
  2. sudo ./myGuiProgram使用。 。 。交換nohup sudo ./myGuiProgram 2>&1>/dev/null &
  3. スクリプトから4つすべてを削除しますexit(使用方法は重複するだけです)。
  4. sleep 1スクリプトの最後に追加

端末でスクリプトを起動する

exec script

注:外部exec関数なしでスクリプトを起動する唯一の方法はexecあまりよくありません。scriptスクリプトからxtermを突然終了させることです(xtermのシェルプロセスは、スクリプトソルバーpf bashの親であるコマンドの親を受け入れます)。

kill $(ps -ho ppid -p $(ps -ho ppid -p $$))

スクリプトの最後の行に

1.と2.を使うべきだと思いました。 nohupには、プログラムの出力を無視するパラメータが必要です。それ以外の場合は、無駄なコンテンツの拡張パイプのみが追加されます。

おすすめ記事