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

dri*_*ter 7 syntax bash

你能否详细解释一下最后一行是什么,为什么需要它?

while true; do
    /usr/bin/ssh -R 55555:localhost:22 -i ~/.ssh/tunnel-id user@server.com
    sleep 1
done < /dev/null & disown
Run Code Online (Sandbox Code Playgroud)

这是整个脚本,其目的是创建到中继服务器的SSH隧道.我是Bash的新手,但看起来它会不断尝试保持连接活着,但我不明白最后一行的语法.

此脚本是在防火墙后面使用SSH的过程的一部分,或者在我的情况下是NAT:http: //martin.piware.de/ssh/index.html

Cha*_*tin 7

最后一行重定向/dev/null到循环作为输入 - 它立即返回EOF- 并在后台运行该过程.然后它在前台运行一个命令disown(1),它将进程分离,防止HUP信号停止它(有点像nohup那样).效果是使循环成为守护进程.

循环整体每秒运行一次ssh命令.该命令打开一个ssh隧道,将其本地连接到端口5555,并远程连接到端口22(ssh).如果有东西可以连接,它确实可以; 否则重定向的EOF会导致它终止.然后它稍后再试一次.

(或者我相信,我还没有尝试过.)

在bash中,disown是内置的; 用help disown来看一些细节.