从批处理调用时找不到cygwin bash脚本命令

时间:2009-07-29 16:48:58

标签: bash cygwin

#!/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命令的“command not found”。我认为bash.exe没有设置PATH。

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

5 个答案:

答案 0 :(得分: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 \本地\ BIN;%CYGWIN_HOME%\ USR \本地\ sbin目录

关闭命令提示符,然后重新打开它。现在应该可以获得cygwin二进制文件。你可以输入“which bash”来仔细检查。它应该报告bash可执行文件的位置。

答案 1 :(得分:11)

FWIW,Cygwin有cron

您是否正在调用此脚本?

bash --login -i ./myscript.sh

答案 2 :(得分:10)

将您的cygwin bin目录(可能是C:\cygwin\bin)放在PATH环境变量上。

这也使您能够在常规控制台窗口而不仅仅是Cygwin控制台中使用tarlsrm等命令。< / p>

答案 3 :(得分:2)

如果从Windows命令shell调用此脚本,则第一行将导致错误,因为#!/bin/bash不是可识别的Windows命令,并且#不是批处理文件中的有效注释分隔符

所以,最重要的是,这个脚本作为常规批处理文件运行,而不是从Cygwin的bash中运行。如matt b所述,您可能在PATH环境变量中没有Cygwin可执行文件路径。没有这个,批处理文件找不到Cygwin实用程序(tardate)。

答案 4 :(得分:0)

我刚遇到这个问题。

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

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

如果这样做,即使您从批处理文件中调用它,您的bash脚本仍然有效。