Curl パイプスクリプトは新しい端末ウィンドウを分岐します。

Curl パイプスクリプトは新しい端末ウィンドウを分岐します。

一部のLinuxディストリビューションでは説明できないほど新しいターミナルインスタンスを分岐するスクリプトがあります。そうしないことをお勧めします。奇妙なことは、スクリプトを直接実行すると追加の./install.sh端末インスタンスが作成されないことです。

curl qz.sh | bash # warning this will install a Linux Desktop App you may not want :)
  • 存在するMacOS モハビ:うまくいきます。
  • 存在するUbuntu22.04:仮想マシンではうまく機能します。
  • 存在するFedora 34:仮想マシンではうまく機能します。
  • 存在するUbuntu 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

Q:これが一部の環境で新しい端末インスタンスを作成するのはなぜですか?これが起こるのを防ぐ方法は何ですか?

ベストアンサー1

インストーラを直接実行しても端末が生成されないのは、tty -s端末ですでに実行されていることを確認するために makeself が使用されるためです。GitHubのソースコード。実行curl qz.sh | bash時にスクリプトを直接実行すると、開いたパイプが存在しないため、テストはtty -s失敗します。

端末が開かないようにするには、 makeself--nox11フラグを使用して以下を引用することができます.閲覧ファイル:

--nox11: X11 で新しい端末の自動生成を無効にします。

おすすめ記事