Git Bash 不会退出 while 循环,而 ubuntu 中的 bash 会退出

问题描述 投票:0回答:1

我在 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 ubuntu git-bash msys2
1个回答
0
投票

因此,在使用

bash -x
进行一些调试并删除输出到
/dev/null/
后,很明显,虽然
nc
在我的 bash 中可用,但通过
bash script.sh
启动脚本会启动一个新的 shell,该 shell 不会加载别名我设置在我的
~/.bashrc
中,即
alias nc='ncap'

这是由于 Git Bash 默认情况下不加载

.bashrc
(如here所述)而造成混淆的,事实上我之前使用
bash -x
调试命令,但不知道将命令输出通过管道传输到
 /dev/null
也不在调试输出中显示它。所以最后它只是显示了

nc -vz localhost 8002
sleep 0.1

在一个循环中,我怀疑这是一个成功的执行。

© www.soinside.com 2019 - 2024. All rights reserved.