Linux
打開應用程序後關閉終端視窗
載入應用程序後是否可以關閉父終端視窗?
我有一個程序需要使用
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
第二次嘗試
從那以後我修改了我的腳本,但仍然沒有運氣。此方法允許我在不關閉程序的情況下手動退出終端視窗
#!/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 $$))
一般來說,您可以啟動一個 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 &
- 刪除腳本中的所有四個
exit
(您使用它的方式只是多餘的)- 附加
sleep 1
在腳本的末尾在終端中啟動腳本
exec script
注意:在腳本中沒有外部 exec 功能並在腳本中具有外部 exec 功能的唯一方法
exec
不是很好:在腳本中突然結束 xterm(xterm 的 shell 程序的父程序接受script
命令,它是腳本解釋器的父 pf bash)kill $(ps -ho ppid -p $(ps -ho ppid -p $$))
作為腳本的最後一行
使用 1. 和 2. 的需要也給了我一個想法:nohup 應該有一個參數來忽略程序的輸出,因為否則它只會為浪費的內容添加一個廣泛的管道