애플리케이션을 로드한 후 상위 터미널 창을 닫을 수 있나요?
제대로 작동하려면 권한을 사용하여 실행해야 하는 프로그램이 있습니다 . 현재 사용자가 있는지 확인하고 그렇지 않은 경우 앱을 로드하기 전에 비밀번호를 확인하도록 요청 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 &
- 스크립트에서 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에는 프로그램의 출력을 무시하는 매개변수가 있어야 합니다. 그렇지 않으면 낭비되는 콘텐츠에 대한 확장 파이프만 추가하게 됩니다.