代码之家  ›  专栏  ›  技术社区  ›  rtacconi

从批处理调用时未找到cywin bash脚本命令

  •  11
  • rtacconi  · 技术社区  · 15 年前
    #!/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控制台内部调用时可以工作,但是当我尝试从批处理文件调用它时,我会得到日期和tar命令的“找不到命令”。我认为bash.exe没有设置路径。

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

    5 回复  |  直到 9 年前
        1
  •  9
  •   matt b    15 年前

    把你的cygwin bin目录(可能 C:\cygwin\bin )在PATH环境变量上。

    这也将使您能够使用如下命令 tar , ls , rm 等。从常规控制台窗口,而不仅仅是Cygwin控制台。

        2
  •  16
  •   Michael Aaron Safyan    15 年前

    如前所述,您需要将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可执行文件的位置。

        3
  •  11
  •   seth    15 年前

    斯威夫,塞格温 cron .

    你是这样称呼你的剧本吗?

    bash --login -i ./myscript.sh
    
        4
  •  2
  •   Tim Henigan    15 年前

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

    因此,底线是这个脚本作为常规批处理文件运行,而不是从Cygwin的bash中运行。如前所述 matt b ,您的path环境变量中可能没有cygwin可执行路径。如果没有这个,批处理文件就找不到cygwin实用程序( tar date )

        5
  •  0
  •   Itaipu    9 年前

    我刚遇到这个问题。

    编辑环境变量非常有效。但是如果你没有管理权,你就不能这样做。 在这种情况下,可以使用绝对路径执行命令,如:

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

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