Curl 파이프 스크립트는 새 터미널 창을 분기합니다.

Curl 파이프 스크립트는 새 터미널 창을 분기합니다.

일부 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: 새로운 단말기가 생산되었다고 합니다
  • 존재하다만자로 XFCEsudo ...: 스크립트의 명령에 도달하고 새 터미널 인스턴스를 생성할 때까지 잘 작동합니다.

완전한 소스 코드여기.

문제의 코드는 다음과 같습니다.

# 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에서 새 터미널의 자동 생성을 비활성화합니다.

관련 정보