加载应用程序后是否可以关闭父终端窗口?
我有一个需要使用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 $$))
答案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 &
- 删除脚本中的所有四个
exit
(您使用它的方式只是多余的) - 附加
sleep 1
在脚本末尾
在终端中启动脚本
exec script
注意:在脚本中没有外部 exec 功能启动脚本的唯一方法exec
不是很好:script
在脚本中突然结束 xterm (xterm 的 shell 进程接受命令的父级,它是脚本解释器的父级 pf bash)
kill $(ps -ho ppid -p $(ps -ho ppid -p $$))
作为脚本的最后一行
使用 1. 和 2. 的需要也给了我一个想法:nohup 应该有一个参数来忽略程序的输出,否则它只会为浪费的内容添加一个扩展的管道