应用程序打开后关闭终端窗口

应用程序打开后关闭终端窗口

加载应用程序后是否可以关闭父终端窗口?

我有一个需要使用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

您有一个仍在终端中获取输入的脚本,因此您的终端不必很快退出,因此解决方案如下:

  1. ./myGuiProgram用。。。来代替nohup ./myGuiProgram 2>&1>/dev/null &
  2. sudo ./myGuiProgram用。。。来代替nohup sudo ./myGuiProgram 2>&1>/dev/null &
  3. 删除脚本中的所有四个exit(您使用它的方式只是多余的)
  4. 附加sleep 1在脚本末尾

在终端中启动脚本

exec script

注意:在脚本中没有外部 exec 功能启动脚本的唯一方法exec不是很好:script在脚本中突然结束 xterm (xterm 的 shell 进程接受命令的父级,它是脚本解释器的父级 pf bash)

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

作为脚本的最后一行

使用 1. 和 2. 的需要也给了我一个想法:nohup 应该有一个参数来忽略程序的输出,否则它只会为浪费的内容添加一个扩展的管道

相关内容