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,它不会加载别名 I设置在我的
~/.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.