Comando para sair do script, mas não da sessão SSH

Sep 17 2020

Esta é minha primeira postagem aqui e ainda não sou um especialista em scripts Linux / Bash. :-)

Então, escrevi o seguinte código para meu Raspberry Pi e ele funciona bem, exceto por um pequeno problema.

Estou usando SSH para fazer login no Raspberry Pi. Quando o pino 17 estiver alto, (valor lógico digital de 1 ou 5 volts), quero a mensagem "Notei um 1" impressa na saída do terminal e, em seguida, quero sair do script e ainda permanecer conectado ao Raspberry Pi.

O problema que estou enfrentando é quando o script vê um valor lógico de 1, ele desliga toda a conexão ssh e me leva de volta à sessão do terminal do meu laptop.

Não quero que o script saia da conexão ssh quando o pino 17 ler 1. Eu só quero que ele pare de executar o scriot e me leve de volta ao terminal do raspberry Pi, onde ainda estou conectado ao raspberry Pi para que eu possa fazer outro coisa.

Basicamente, NÃO quero fechar a sessão SSH quando o scipt for encerrado. Você poderia me dar algumas sugestões para corrigir esse problema?

Obrigado pela resposta!

pin=17
gpio mode $pin in while true; do if [[ $(gpio read $pin) -eq 1 ]]; then echo "I noticed a 1 whcih means I noticed 5 volts!" return elif [[ $(gpio read $pin) -eq 0 ]]; then
        echo "Did not see a 1, so I will keep looping"
        echo ""
        sleep 2
    fi
done

Respostas

1 LeRouteur Sep 17 2020 at 21:27

Bem-vindo ao Server Fault. Tente usar o seguinte código:

pin=17
gpio mode $pin in while true; do if [[ $(gpio read $pin) -eq 1 ]]; then echo "I noticed a 1 whcih means I noticed 5 volts!" kill -INT $$
    elif [[ $(gpio read $pin) -eq 0 ]]; then
        echo "Did not see a 1, so I will keep looping"
        echo ""
        sleep 2
    fi
done
glennjackman Sep 17 2020 at 22:26

Presumo que você faça algo como

ssh raspberrypi /path/to/script

Então, sim, quando o script sai, a sessão ssh também termina.

No entanto, no script, em vez de sair, gere um shell interativo:

    if [[ $(gpio read $pin) -eq 1 ]]; then
        echo "I noticed a 1 whcih means I noticed 5 volts!"
        exec bash -li

Isso substitui o processo de script em execução por um shell de login interativo.

Você pode precisar de ssh -tou ssh -tt, teste sem primeiro.