如何退出从perl脚本调用的cygwin / bash环境?

时间:2014-09-25 09:29:29

标签: bash perl batch-file cygwin

在Windows XP上,我有一个bat文件,它调用一个perl脚本,它本身应包含一个" make"在cygwin上下文中的命令。 (我无法更改此BAT - > PERL - > CYGWIN结构)。这有点作用,但我不知道如何退出cygwin环境。

例如,在我的perl脚本中,这一行似乎有效:

        print STDOUT "START PERL SCRIPT\n" ;
system ("$ENV{CYGWIN_HOME}\\bin\\bash | $ENV{CYGWIN_HOME}\\bin\\make -version");
print STDOUT "END OF PERL SCRIPT\n" ;

但是,在我的cmd.exe中,这是我的输出:

  • START PERL SCRIPT
  • GNU Make 3.80版权所有(C)2002自由软件 Foundation,Inc。
  • 这是免费软件;看到复制的来源 条件。没有保修;甚至没有适销性或 适合特定目的。
  • 的bash-3.2 $

我的问题是我留在bash环境中:行" bash-3.2 $"仍然在等待命令,我不能'找到一个自动退出的解决方案(唯一的方法是手动打印"退出"在cmd.exe中)。 因此我的perl脚本被停止而不是自动继续其工作。

我没有成功解决诸如此类的解决方案 " Using perl to run more than one system command in a row"

您是否知道如何编写perl脚本和命令以退出bash环境并继续使用perl脚本?

非常感谢, Calim


更新

所以最后我转到了另一个解决方案。它似乎工作(即我执行shell命令后回到我的perl脚本);我只希望没有意想不到的效果。你有什么意见吗?

print STDOUT "START PERL SCRIPT\n";

open ( CYGWIN , "|-" , "$ENV{CYGWIN_HOME}\\bin\\bash" ) ;
print CYGWIN "$ENV{CYGWIN_HOME}\\bin\\make -w -C /cygdrive/c/tmp/Generation makefile" ;
close CYGWIN ;

print STDOUT "END OF PERL SCRIPT\n";

2 个答案:

答案 0 :(得分:2)

为什么要将bash的输出汇总到make?!?!?!

system("$ENV{CYGWIN_HOME}\\bin\\make -version");

或者您可能需要bash设置的一些环境变量。

system("$ENV{CYGWIN_HOME}\\bin\\bash -c 'make -version'");

答案 1 :(得分:-2)

所以最后我转到了另一个解决方案。它似乎工作(即我执行shell命令后回到我的perl脚本);我只希望没有意想不到的效果。你有什么意见吗?

print STDOUT "START PERL SCRIPT\n";

open ( CYGWIN , "|-" , "$ENV{CYGWIN_HOME}\\bin\\bash" ) ;
print CYGWIN "$ENV{CYGWIN_HOME}\\bin\\make -w -C /cygdrive/c/tmp/Generation makefile" ;
close CYGWIN ;

print STDOUT "END OF PERL SCRIPT\n";