2014-02-02 2 views
1

Оцените любую помощь и извините, если моя терминология неверна.расписание запуска сценария оболочки bash в окнах

это скрипт (* ш файл.), Что:
1-идет к определенной директории A
2-копии файлов с другого дир В дир
3- # comented из # также расстегивает файлы в дир а и его подкаталоги
4- # comented из # он также удаляет строки 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 

, чтобы попасть в Баш терминал, а затем дать следующую команду:

/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, как я уже говорил выше

Теперь я хочу запланировать этот скрипт (filename.sh), как если бы я был .vbs или .bat-файл в окна с использованием t спросить планировщик? Может ли кто-нибудь это посоветовать?

Примечание. Я попытался написать пакетный файл Windows (.bat), чтобы сделать это (см. Ниже), но я не мог заставить мои команды unzip и sed работать, see here. Поэтому я попытался написать сценарий оболочки Bash выше.

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' '{}' ';' 
+0

подобный вопрос [здесь] (http://stackoverflow.com/questions/19285809/cgywin-sh-file-run-as-windows-task-scheduler) – HattrickNZ

ответ

2

Решение - связать файлы .sh с командным файлом, который запускает bash. Таким образом, всякий раз, когда вы указываете Windows на выполнение sh-файла, он будет использовать правильную пусковую установку - будь то с помощью двойного щелчка или запланированной задачи. Вот мой:

@echo off 

d: 
chdir d:\cygwin\bin 

bash --login %* 

Общаясь типом файла означает, что при попытке выполнить файл этого типа, окно будет использовать путь к этому файлу в качестве аргумента, переданного в программу вы указали. Например, у меня есть LibreOffice4, связанный с файлами .ods. Поэтому, если я дважды щелкнул файл .ods или просто ввел путь к файлу .ods в командной строке, окна будут запускать open calc calc, причем первым параметром будет ods-файл. Поэтому, если у меня есть Без названия.ods на моем рабочем столе. Я дважды щелкнул его. Это фактически то же самое, как открытие до командной строки, набрав

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

и нажать ввод. В самом деле, если я это сделаю, ожидается следующее: open office calc запускается и загружает файл.
Вы можете увидеть, как это работает, если вы измените связь с echo.exe (которую я нашел в D: \ cygwin \ bin). Если я change the association эхо, откройте командную строку и введите

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

Я просто вижу echo.exe эхо имя файла обратно ко мне.

Так что я предлагаю вам сделать это:

  1. создать пакетный файл для запуска Баш сценариев с использованием Баш (или использовать мину) Cygwin в.
  2. изменить ассоциацию для .sh-файлов в этот командный файл
  3. выполнить эти .sh-файлы напрямую, как если бы они были .exe или .bat-файлами. спросил
+0

, который представляет ту же проблему. Я положил его в начале моего сценария, и как только я дважды нажимаю на * .bat-файл, я получаю окно CMD/DOS с cygwin CLI. Правильно ли это звучит? – HattrickNZ

+0

Нет, ассоциируйте * .sh с командным файлом, затем просто запустите файл sh. Я отредактирую свой ответ, чтобы объяснить, связать тип файла. –

+1

gothya tks, также нашел другой способ, указав следующую команду в запуске как часть планировщика задач 'C: \ cygwin \ bin \ bash.exe -c -l '/ cygdrive/c/path/where/the/file/is/filename.sh'', но вы не можете дважды щелкнуть по файлу .sh таким образом – HattrickNZ

0

Почему бы не создать пакетный файл (.bat), который загружает ваш bashscript cygwin и расписал этот пакетный файл? например, вам не нужно иметь дело с тем, как M $ обрабатывает параметры

+0

Я попытался Адамс предложение ниже. но не уверен, что я пытаюсь это точно. Не могли бы вы привести конкретный пример с тем, что я уже представил выше? – HattrickNZ

+0

Я попробую по утрам, у меня нет доступа к машине для Windows прямо сейчас, так как все мои домашние компьютеры - это linux ;-) –

Смежные вопросы