安排在Windows中运行bash shell脚本

时间:2014-02-02 23:58:28

标签: windows bash shell cygwin

如果我的术语不正确,请提供帮助,请原谅。

这是一个脚本(* .sh文件): 1 - 转到特定目录A
从另一个目录B到目录A的2个副本文件 3-#comented out#它还解压dir A及其子目录中的文件 4-#comented out#它还删除了第1-6行和第二行中所有* .csv文件的最后一行

#!/bin/bash

# Configure bash so the script will exit if a command fails.
set -e 

#cd to the dir you want to copy to:
cd /cygdrive/c/path/I/want/to/copy/to
#echo Hello

#cp the files i want 
#include the subdirectories 
cp -r /cygdrive/c/path/I/want/to/copy/from/* .

# This will unzip all .zip files in all subdirectories under this one.
# -o is required to overwrite everything that is in there
#find -iname '*.zip' -execdir unzip -o {} \;

#find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';'

现在我可以通过转到存储文件的目录并提供以下命令来使这个脚本在cygwin中工作:

./filename.sh

/cygdrive/c/path/where/the/file/is/filename.sh

bash filename.sh



我也可以通过执行以下操作在CMD / Windows DOS中执行此操作:

C:\cygwin\bin\bash.exe -l 

进入bash终端然后提供以下命令:

/cygdrive/c/path/where/the/file/is/filename.sh

在任务计划程序(在Windows中)中,我尝试安排以下操作:

C:\cygwin\bin\bash.exe -l /cygdrive/c/path/where/the/file/is/filename.sh

但这不起作用,即使单独的命令在CMD / Windows DOS中工作,如上所述

现在我想要做的是能够像使用任务调度程序在Windows中调用.vbs或.bat文件一样安排此脚本(filename.sh)吗?有人可以就此提出建议吗?

注意我曾尝试编写Windows批处理文件(.bat)来执行此操作(请参阅下文),但我无法使用我的解压缩和sed命令,see here。所以我试着在上面编写Bash shell脚本。

chdir C:\pointA
C:\cygwin\bin\cp.exe /cygdrive/v/pointB/* .
::find -iname *.zip -execdir unzip {} \;
::find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';' 

2 个答案:

答案 0 :(得分:2)

解决方案是将.sh文件与运行bash的批处理文件相关联。这样,无论何时告诉Windows执行sh文件,它都会使用正确的启动器 - 无论是通过双击还是计划任务。这是我的:

@echo off

d:
chdir d:\cygwin\bin

bash --login %*

关联文件类型意味着当您尝试执行该类型的文件时,Windows将使用该文件的路径作为传递给您指定的程序的参数。例如,我有与.ods文件关联的LibreOffice4。因此,如果我双击.ods文件,或者只是在命令提示符下输入.ods文件的路径,windows将运行open office calc,第一个参数是ods文件。所以,如果我的桌面上有Untitled.ods。我双击它。这实际上与打开命令提示符相同,输入

D:\Program Files (x86)\LibreOffice 4\program\scalc.exe" "C:\Users\Adam\Desktop\Untitled.ods".

并点击进入。实际上,如果我这样做,预期就会发生:开放式办公室计算启动并加载文件 如果将关联更改为echo.exe(我在D:\ cygwin \ bin中找到),您可以看到它是如何工作的。 如果我change the association要回显,请打开命令提示符并键入

"C:\Users\Adam\Desktop\Untitled.ods"

我只会看到echo.exe将文件名回显给我。

所以我建议你这样做:

  1. 创建一个批处理文件,使用cygwin的bash运行bash脚本(或使用我的)。
  2. 将.sh文件的关联更改为该批处理文件
  3. 直接执行这些.sh文件,就像它们是.exe或.bat文件一样。

答案 1 :(得分:0)

为什么不创建加载cygwin bash脚本并安排此批处理文件的批处理文件(.bat)?像这样你不必处理M $处理参数的方式