アプリケーションをロードした後、親端末ウィンドウを閉じることはできますか?
正しく機能するには、権限を使用して実行する必要があるプログラムがあります。現在ユーザーがいることを確認し、そうでない場合は、アプリを読み込む前にパスワードを確認するように要求するroot
スクリプトファイルを作成しました。root
root
オリジナル
私のスクリプトファイルの内容は次のとおりです。
#!/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
端末から入力を受け取るスクリプトがあるため、端末をすぐに終了する必要がないため、解決策は次のとおりです。
./myGuiProgram
使用。 。 。交換nohup ./myGuiProgram 2>&1>/dev/null &
sudo ./myGuiProgram
使用。 。 。交換nohup sudo ./myGuiProgram 2>&1>/dev/null &
- スクリプトから4つすべてを削除します
exit
(使用方法は重複するだけです)。 sleep 1
スクリプトの最後に追加
端末でスクリプトを起動する
exec script
注:外部exec関数なしでスクリプトを起動する唯一の方法はexec
あまりよくありません。script
スクリプトからxtermを突然終了させることです(xtermのシェルプロセスは、スクリプトソルバーpf bashの親であるコマンドの親を受け入れます)。
kill $(ps -ho ppid -p $(ps -ho ppid -p $$))
スクリプトの最後の行に
1.と2.を使うべきだと思いました。 nohupには、プログラムの出力を無視するパラメータが必要です。それ以外の場合は、無駄なコンテンツの拡張パイプのみが追加されます。