我在 Bash 脚本中有一个
while
循环,看起来像这样
#!/bin/bash
# do something with kubectl port-forward
while ! nc -vz localhost "$port" > /dev/null 2>&1 ; do
# echo sleeping
sleep 0.1
done
#access ressource on the port-forwarded website
基本上应该等待
kubectl port-forward
命令成功启动。
但是,在 Git Bash 下执行脚本(我通过
MSYS_NO_PATHCONV=1 bash
执行)会导致无限循环,因为它永远不会退出 while
循环。我安装了 ncap,并且 nc 命令 nc -vz localhost $port
可以正常工作。使用 -x
执行表明它正在循环运行成功的 nc
命令。
在 Ubuntu WSL 中执行相同的脚本,它正常工作,按预期退出
while
循环并继续。
因此,在使用
bash -x
进行一些调试并删除输出到 /dev/null
后,很明显,虽然 nc
在我的 bash 中可用,但通过 bash script.sh
启动脚本会启动一个新的 shell,它不会加载别名 I设置在我的 ~/.bashrc
中,即 alias nc='ncap'
。
这是由于 Git Bash 默认情况下不加载
.bashrc
(如here所述)而造成混淆的,事实上我之前使用 bash -x
调试命令,但不知道将命令输出通过管道传输到 /dev/null
也不在调试输出中显示它。所以最后它只是显示了
nc -vz localhost 8002
sleep 0.1
在一个循环中,我怀疑这是一个成功的执行。