!<在这个 bash 脚本中是什么意思,为什么它指向不存在的文件?
bash -c 'while !</dev/tcp/db/5432; do sleep 1; done; npm start'
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的时间!
您应该将其与<. 该语法< file打开文件内容以进行输入重定向,以便任何应用程序读取标准输入。
在您的特定语法</dev/tcp/db/5432(远程主机上的 tcp 端口)中,定义该构造只是为了验证文件是否可以打开以供读取。该命令将返回成功的退出代码0,如果文件可访问并!否定返回的退出代码。
所以基本上你的例子中的 while 循环, sees while 1,如果文件可访问,这在shell上下文中意味着非零退出代码返回,这根本不会让睡眠发生。不完全清楚您的意图是在文件可以打开之前休眠还是以其他方式。
!是一个否定运算符。例子:
while ! false; do
echo "inside while loop"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
将永远在循环内,因为! false它始终为真。
<是另一个运营商。它告诉 bash 读取指定的文件。如果文件存在且可读,它将成功(返回零退出代码)。没有左操作数,读取结果将被丢弃。示例:检查是否/tmp/sample_file存在:
if < /tmp/sample_file; then echo 'file exists'; fi
Run Code Online (Sandbox Code Playgroud)
因此,您的代码将sleep 1在循环中运行而/dev/tcp/db/5432无法读取。
现在考虑到这/dev/tcp/是一条特殊路径,访问/dev/tcp/db/5432意味着尝试db通过 TCP 端口 5432连接到主机。
因此,while 循环背后的逻辑是“休眠,直到主机 db 上的 postgresql 准备就绪”(5432 是 PostgreSQL 的默认端口)。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |