Comando per uscire dallo script ma non dalla sessione SSH

Sep 17 2020

Questo è il mio primo post qui e non sono ancora un esperto di scripting Linux / Bash. :-)

Quindi ho scritto il seguente codice per il mio Raspberry Pi e funziona bene tranne che per un piccolo problema.

Sto usando SSH per accedere al raspberry Pi. Quando il pin 17 è alto, (valore logico digitale di 1 aka 5 volt), voglio che il messaggio "Ho notato un 1" stampato sull'uscita del terminale e poi voglio uscire dal e rimani comunque connesso al raspberry Pi.

Il problema che sto affrontando è quando lo script vede un valore logico di 1, interrompe l'intera connessione ssh e mi riporta alla sessione del terminale del mio laptop.

Non voglio che lo script esca dalla connessione ssh quando il pin 17 legge un 1. Voglio solo che interrompa l'esecuzione dello scriot e mi riporti al terminale Raspberry Pi dove sono ancora connesso al Raspberry Pi in modo da poter fare altro cose.

Fondamentalmente NON voglio chiudere la sessione SSH quando esce lo scipt. Potresti darmi qualche suggerimento per risolvere questo problema?

Grazie per la risposta!

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

Risposte

1 LeRouteur Sep 17 2020 at 21:27

Benvenuto in Server Fault. Prova a utilizzare il codice seguente:

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

Suppongo che tu faccia qualcosa di simile

ssh raspberrypi /path/to/script

Quindi, sì, quando lo script termina, anche la sessione ssh termina.

Tuttavia, nello script, invece di uscire, genera una shell interattiva:

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

Ciò sostituisce il processo di script in esecuzione con una shell di login interattiva.

Si potrebbe essere necessario ssh -to ssh -tt, test senza prima.