这是我在这里的第一篇文章,我还不是 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 -t
或ssh -tt
,先测试无需。