退出调用bash的cmd脚本



我有以下cmd脚本调用cygwin bash脚本:

C:cygwinbinbash -l /D/Temp/testScript/cygScript.sh
echo back in cmd.
exit

bash脚本很简单:

#!/bin/bash
echo Hello World!
read

调用部分工作得很好——bash shell登录,按预期返回,按预期读取,并按预期将控制传递回cmd。

但是cmd不会退出。如果我从命令窗口运行它,这很好,但我将通过双击cmd文件或从run等启动它来调用它。

输出我看到:

D:TemptestScript>C:cygwinbinbash -l /D/Temp/testScript/shellScript.sh
Hello World!
D:TemptestScript>echo back in cmd.
back in cmd.
D:TemptestScript>exit

如何让cmd退出?

找到问题了- bash太多

我想我发现了这个问题-可能是在我的。bashrc和其他文件我在cygwin登录期间加载的东西。如果我更改主cmd行以删除登录标志),它会像预期的那样工作-一切都关闭。

C:cygwinbinbash /D/Temp/testScript/cygScript.sh

但是我把旗子放回去了:

C:cygwinbinbash -l /D/Temp/testScript/cygScript.sh

并再次运行。我看到输出Hello World!,它告诉我控制是用bash的,我检查任务管理器。创建4个 bash.exe实例。然后我按下ENTER,看到输出back in cmd.显示我控制与cmd。现在任务管理器显示三个 bash.exe实例仍然存在。

所以,在我的登录脚本的东西正在创建额外的bash shell。所以不是你的问题,是我的问题。

通过使用cygstart而不是cmd来避免在登录脚本中创建持久的子shell

之前我写过问题是太多的bash 。我的.bash_profile正在做一些事情来创建bash子shell(这些子shell是持久的,因为它们启动的作业一直在后台运行)。这意味着当我的cmd创建了一个bash(通过登录)并且第一个bash退出时,子shell没有退出。

我发现我的部分登录脚本涉及启动一些自动热键脚本,像这样:

cmd /c "$thePath" &

修复是如此简单…使用cygstart:

cygstart "$thePath"

最新更新