我写了一个perl脚本,它使用了一些linux命令(grep
、ls
等)。我可以在Cygwin或Linux上成功地运行它。我希望在安装了Cygwin的Windows服务器上定期运行此任务。我计划使用Windows任务调度程序。但是我不确定如何在Windows bat文件中指定需要在Cygwin模式下调用我的perl脚本?
编辑:我尝试了Glenn的命令。当我尝试运行perl脚本时,它似乎没有响应。因此,我尝试使用一个示例脚本:test.sh
,它包含以下两行代码:
ls -l
cd ..
下面是我得到的屏幕截图:
发布于 2011-01-05 14:15:52
我不是cygwin的狂热粉丝,我个人更喜欢GNU工具的本地编译版本,例如GnuWin32。
我还想知道为什么您要在Perl脚本中使用grep
、ls
等。大多数功能都可以由Perl原生处理,这通常会带来更好的可移植性和健壮性。
发布于 2011-01-05 14:06:53
也许(未测试):c:\cygwin\bash.exe -c /path/to/your/script.pl
更新:
最后一条错误消息揭示了一个问题:您的脚本是DOS格式的文件(CRLF行结尾),而cygwin查找UNIX格式(LF行结尾)。每行末尾的杂乱回车就是问题所在。例如,没有名为"..\r“的目录
使用文本编辑器,您可以在其中指定要使用的行尾。在bash shell中,您可以执行dos2unix test.sh
ls
错误表明/bin和/usr/bin不在您的bash环境的$PATH中--这是真的吗?
发布于 2011-01-06 11:29:28
在运行perl之前,只需将cygwin添加到路径中即可。例如,我经常在dos shell中运行find
,但得到相当可怕的消息FIND:参数格式不正确。哇!相反,我必须通过dos cmd文件cyg.cmd
运行find
c:> find . -iname interesting.txt
FIND: Parameter format not correct
c:> cyg find . -iname interesting.txt
sub/sub/interesting.TXT
c:> type bin\cyg.cmd
setlocal
PATH=c:\Progs\Cygwin\bin;%PATH%
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
这里最重要的一点是PATH=c:\Progs\Cygwin\bin;%PATH%
。
顺便说一句,我更喜欢cygwin版本的工具,而不是它们的MinGW等价物-它的环境更接近Mac/Linux,毕竟可移植性很重要。
https://stackoverflow.com/questions/4603383
复制