Eu tenho um script que inexplicavelmente bifurca uma nova instância do Terminal em algumas distribuições Linux... Prefiro que não faça isso. Estranhamente, quando executo o script diretamente ( ./install.sh
), a instância adicional do Terminal não é criada.
curl qz.sh | bash # warning this will install a Linux Desktop App you may not want :)
- No MacOS Mojave : Funciona normalmente
- No Ubuntu 22.04 : Funciona normalmente em uma VM
- No Fedora 34 : Funciona normalmente em uma VM
- No Ubuntu 20.10 : Alegadamente gera um novo terminal
- No Manjaro XFCE : Funciona bem até atingir o
sudo ...
comando no script e gerar uma nova instância do Terminal
Código fonte completo aqui .
O código em questão é o seguinte:
# 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
Pergunta: Por que isso gera uma nova instância do Terminal em alguns ambientes e como posso evitar que isso aconteça?
A razão pela qual um terminal não é criado ao executar o instalador diretamente é que se usa
tty -s
para determinar se ele já está rodando em um terminal ou não, veja o código fonte no GitHub . Ao executarcurl qz.sh | bash
, você está abrindo um pipe que não está lá ao executar o script diretamente, fazendo com que otty -s
teste falhe.Para evitar que o terminal seja aberto, você pode usar a
--nox11
flag do próprio, citando o README :