在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中,这是我的输出:
我的问题是我留在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";
答案 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";