O Bash pode informar uma sessão SSH interativa de uma sessão SSH em linha?

1

Eu tenho um script Bash que precisa ser executado a partir de um prompt interativo, devido a variáveis de ambiente e configurações que parecem ser lidas apenas quando efetivamente logadas em uma sessão. Exemplos abaixo:

Bom

me@client:~$ ssh box
user@box:~$ /usr/local/bin/myscript

Ruim

me@client:~$ ssh box "/usr/local/bin/myscript"

Existe algum Bash-fu que eu possa usar no meu script para determinar se ele está sendo executado por meio de um comando SSH de uma linha?

    
por Craig Watson 04.02.2016 / 14:40

1 resposta

1

Você poderia apenas verificar se há um terminal conectado à entrada padrão (é o que o comando tty faz). Adicione estas linhas ao seu script:

if ! tty >/dev/null; then
    echo "Must be run from a tty"
    exit 1
fi

Seu script será encerrado com um erro, a menos que seja executado corretamente:

$ ssh badabing ~/scripts/a.sh
Must be run from a tty

$ ssh badabing
terdon@badabing ~ $ ~/scripts/a.sh
Works!
    
por 04.02.2016 / 14:55