您能否详细说明最后一行是什么,以及为什么需要它?
while true; do
/usr/bin/ssh -R 55555:localhost:22 -i ~/.ssh/tunnel-id user@server.com
sleep 1
done < /dev/null & disown
这是整个脚本,其目的是创建到中继服务器的SSH隧道。我是Bash的新手,但看起来它会不断尝试保持连接活着,但我不明白最后一行的语法。
此脚本是在防火墙后面使用SSH的过程的一部分,或者在我的情况下是NAT: http://martin.piware.de/ssh/index.html
答案 0 :(得分:7)
最后一行将/dev/null
重定向到循环中作为输入 - 它立即返回EOF
- 并在后台运行该过程。然后它在前台运行一个命令disown(1),它将进程分离,防止HUP信号停止它(有点像nohup那样)。其结果是使循环成为守护进程。
循环整体每秒运行一次ssh命令。该命令打开一个ssh隧道,将其本地连接到端口5555,并远程连接到端口22(ssh)。如果有东西可以连接,它确实可以;否则重定向的EOF会导致它终止。然后它会在一秒钟之后再试一次。
(或者我相信,我实际上没有尝试过。)
在bash中,disown是内置的;使用help disown
查看一些详细信息。
答案 1 :(得分:2)
将/dev/null
重定向到while
循环会有效关闭其stdin
,该exec <&-
应相当于{{1}}。