卷曲管道脚本分叉一个新的终端窗口

卷曲管道脚本分叉一个新的终端窗口

我有一个脚本无法解释地在某些 Linux 发行版上分叉了一个新的终端实例...我宁愿它不这样做。奇怪的是,当我直接运行脚本 ( ./install.sh) 时,不会创建额外的终端实例。

curl qz.sh | bash # warning this will install a Linux Desktop App you may not want :)
  • MacOS 莫哈维: 工作正常
  • 乌班图22.04:在虚拟机中正常工作
  • 软呢帽 34:在虚拟机中正常工作
  • 乌班图20.10:据报道产生了一个新的终端
  • Manjaro 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

直接运行安装程序时未创建终端的原因是 makeself 用于tty -s确定它是否已在终端中运行,请参阅GitHub 上的源代码。运行时,curl qz.sh | bash您打开的管道在直接运行脚本时不存在,导致测试tty -s失败。

为了防止终端被打开,您可以使用 makeself 的--nox11标志,引用自述文件

--nox11 :禁用 X11 中自动生成新终端。

相关内容