일부 Linux 배포판에서 설명할 수 없을 정도로 새 터미널 인스턴스를 분기하는 스크립트가 있습니다. 그렇게 하지 않는 것이 좋습니다. 이상한 점은 스크립트를 직접 실행하면( ./install.sh
) 추가 터미널 인스턴스가 생성되지 않는다는 것입니다.
curl qz.sh | bash # warning this will install a Linux Desktop App you may not want :)
- 존재하다맥OS 모하비: 잘 작동해요
- 존재하다우분투22.04: 가상 머신에서는 잘 작동합니다.
- 존재하다페도라 34: 가상 머신에서는 잘 작동합니다.
- 존재하다우분투 20.10: 새로운 단말기가 생산되었다고 합니다
- 존재하다만자로 XFCE
sudo ...
: 스크립트의 명령에 도달하고 새 터미널 인스턴스를 생성할 때까지 잘 작동합니다.
완전한 소스 코드여기.
문제의 코드는 다음과 같습니다.
# Install using unattended techniques: https://github.com/qzind/tray/wiki/deployment
echo -e "Download successful, beginning the install..."
case $OSTYPE in
"darwin"*)
# Assume .pkg (installer) for MacOS
sudo installer -pkg "$TEMP_FILE" -target /
;;
*)
# Assume .run (makeself) for others
if which sudo >/dev/null 2>&1 ; then
# use "sudo" if available
sudo bash "$TEMP_FILE" -- -y
else
# fallback to "su -c"
su root -c "bash '$TEMP_FILE' -- -y"
fi
;;
esac
질문: 이것이 일부 환경에서 새로운 터미널 인스턴스를 생성하는 이유는 무엇입니까? 이런 일이 발생하는 것을 방지하는 방법은 무엇입니까?
답변1
설치 프로그램을 직접 실행할 때 터미널이 생성되지 않는 이유는 tty -s
터미널에서 이미 실행 중인지 확인하는 데 makeself 가 사용되기 때문입니다.GitHub의 소스 코드. 런타임 시 curl qz.sh | bash
스크립트를 직접 실행할 때 연 파이프가 존재하지 않아 테스트가 tty -s
실패합니다.
터미널이 열리는 것을 방지하려면 makeself --nox11
플래그를 사용하여 다음을 인용 할 수 있습니다.읽어보기 파일:
--nox11: X11에서 새 터미널의 자동 생성을 비활성화합니다.