退出脚本但不退出 SSH 会话的命令

退出脚本但不退出 SSH 会话的命令

这是我在这里的第一篇文章,我还不是 Linux/Bash 脚本专家。:-)

因此我为我的 Raspberry Pi 编写了以下代码,除了一个小问题外,它运行良好。

我正在使用 SSH 登录到树莓派。当引脚 17 为高电平(数字逻辑值为 1,即 5 伏)时,我希望在终端输出上打印消息“我注意到 1”,然后我希望退出脚本并仍然保持登录到树莓派。

我面临的问题是,当脚本看到逻辑值 1 时,它会关闭整个 ssh 连接并将我带回到笔记本电脑的终端会话。

当引脚 17 读取 1 时,我不希望脚本退出 ssh 连接。我只希望它停止执行 scriot 并将我带回到 Raspberry Pi 终端,我仍然登录到 Raspberry Pi,以便我可以做其他事情。

我基本上不想在脚本退出时关闭 SSH 会话。您能给我一些建议来解决这个问题吗?

感谢您的答复!

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

答案1

欢迎来到 Server Fault。请尝试使用以下代码:

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

答案2

我假设你会做类似的事情

ssh raspberrypi /path/to/script

所以,是的,当脚本退出时,ssh 会话也会结束。

但是,在脚本中,不是退出,而是生成一个交互式 shell:

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

取代使用交互式登录 shell 来运行脚本进程。

可能需要ssh -tssh -tt,先测试无需。

相关内容