Impede que o script gere stdout se chamado de um determinado programa

1

Eu quero que o meu terminal gnome mostre meu usuário atual e host em sua barra de título, e a do controle remoto quando eu estiver usando o ssh.

Para fazer isso, criei um script ~/bin/ssh , com ~/bin no meu PATH antes de /usr/bin :

#!/bin/bash
echo -ne "3]0;${1}
#!/bin/bash
echo -ne "3]0;${1}%pre%7"
/usr/bin/ssh $@
7" /usr/bin/ssh $@

Isso funciona bem (sem dúvida, não é robusto para uma ordem inesperada de argumentos). Mesmo depois de sair da sessão ssh, o título da janela se recupera bem.

Meu problema é que outros programas que tentam usar ssh são perturbados pelo stdout que isso gera. git fetch , por exemplo, barfs em 3]0; .

Minha pergunta é: como posso melhorar o script para que ele mantenha o nome ssh , mas dê stdout apenas em casos relevantes?

Deve haver algum tipo de variável para informar se existe algum título de janela para alterar? Eu acho que TERM ainda está definido quando rodando via git , então isso não funcionaria.

Posso enviar a string para outro stream?

Devo analisar as opções ssh e não exportar para stdout em determinadas condições?

    
por Gauthier 17.03.2016 / 15:05

1 resposta

3

Você quer que seu script verifique se o stdout está indo para um tty ou não.

Referindo-se a essa pergunta do stackoverflow, marque isatty no bash

#!/bin/bash

# set the terminal title, if I'm running in a terminal
if [[ -t 1 ]]; then echo -ne "3]0;${1}
#!/bin/bash

# set the terminal title, if I'm running in a terminal
if [[ -t 1 ]]; then echo -ne "3]0;${1}%pre%7"; fi

/usr/bin/ssh "$@"
7"; fi /usr/bin/ssh "$@"

Note que você sempre deseja citar "$@"

    
por 17.03.2016 / 15:46