当从批处理文件调用时,cygwin bash脚本命令未找到。

11
#!/bin/bash
echo "Testing"
cd "/cygdrive/x/Internal Communications/Riccardo/"
filename=htdocs-`date +%A`.tar.gz
tar cvzf $filename "/cygdrive/c/Program Files/Zend/Apache2/htdocs"

以上脚本在cygwin控制台内调用正常,但当我试图从批处理文件中调用时,date和tar命令会提示“找不到命令”。我认为bash.exe没有设置好PATH。

我需要从批处理文件中运行该脚本,因为我想将该脚本添加到任务计划程序中。

5个回答

17

正如已经提到的,您需要将Cygwin二进制文件添加到您的路径中。要这样做,请右键单击“我的电脑”,点击“属性”,然后点击“高级”,然后点击“环境变量”。

创建一个名为“CYGWIN_HOME”的新环境变量,值为“C:\ cygwin”(或者您安装cygwin的任何位置。默认位置为“C:\ cygwin \”,因此这可能适用于您)。

然后编辑名为“PATH”的环境变量,并将以下内容附加到末尾:

;%CYGWIN_HOME%\ bin;%CYGWIN_HOME%\ sbin;%CYGWIN_HOME%\ usr \ bin;%CYGWIN_HOME%\ usr \ sbin;%CYGWIN_HOME%\ usr \ local \ bin;%CYGWIN_HOME%\ usr \ local \ sbin

关闭命令提示符,然后重新打开它。现在应该可以使用Cygwin二进制文件。您可以通过输入“which bash”来进行双重检查。它应该报告bash可执行文件的位置。


12

顺便提一下,Cygwin有一个cron工具。

你是否像这样调用你的脚本?

bash --login -i ./myscript.sh

4
到目前为止,发布答案的人中,seth 是唯一一个认识到将 C:\cygwin\bin 添加到路径并不能使 Windows 神奇地理解 bash 脚本的人。您需要发送脚本到 bash.exe。 - rob
批处理文件是:C:\cygwin\bin\bash.exe "C:\backup.sh" 我想我没有在cygwin中安装cron。我只需要安装它还是需要进行一些其他配置才能使用cron?谢谢! - rtacconi
@rtacconi - 它不仅仅是安装。我在答案中提供的链接详细介绍了安装/配置cron的步骤。 - seth

10
将你的cygwin二进制文件目录(可能是C:\ cygwin \ bin)添加到PATH环境变量中。 这样做还能让你在普通控制台窗口下使用命令,如tarlsrm等,而不仅仅是在Cygwin控制台下使用。

嗨,我已经添加了路径(我确定这是正确的路径),但是ls、grep等命令仍然找不到。有什么想法吗? - Lysdexia

2
如果这个脚本从Windows命令行调用,第一行会出现错误,因为#!/bin/bash不是一个被Windows识别的命令,而#在批处理文件中也不是有效的注释分隔符。因此,这个脚本将作为常规批处理文件而不是在Cygwin的bash中运行。正如所指出的那样,您可能没有将Cygwin可执行文件路径添加到PATH环境变量中。如果没有这个路径,批处理文件就找不到Cygwin实用程序(tardate)。请注意保留HTML标签。

0

我刚遇到了这个问题。

编辑环境变量是很好的解决方法。但如果你没有管理员权限,你就无法这样做。 在这种情况下,你可以通过使用绝对路径来执行你的命令:

/usr/bin/tar cvzf $filename
/usr/bin/cat $filename

如果这样做,你的bash脚本即使从批处理文件中调用也能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接