Bash脚本:这是什么意思? “完成< / dev / null& disown”

时间:2010-12-13 05:05:09

标签: bash syntax

您能否详细说明最后一行是什么,以及为什么需要它?

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

2 个答案:

答案 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}}。