2011-11-27 27 views
18

Wiem, że po zainstalowaniu Cygwin istnieje plik wsadowy, który służy do uruchamiania go w systemie Windows. Ale jeśli chcę uruchomić skrypt bez uruchamiania Cygwin i wykonywać "./script"Cygwin uruchamia skrypt z jednego pliku wsadowego?

Jak mogę utworzyć plik wsadowy?

Podobnie jak w ... wystarczy jeden plik wsadowy, który po kliknięciu otwiera Cygwin i uruchamia skrypt powłoki.

Odpowiedz

27

Aby uruchomić „foo.bsh”, utwórz plik wsadowy o następującej treści i uruchom go:

set PATH=C:\cygwin\bin;%PATH% 
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh 

„C: \ cygwin \ bin” część może się różnić w zależności od wybranego celu zainstalowania lokalizację Cygwin.

+0

Tak, to działa .. dzięki – dhroove

3

Jaki rodzaj skryptu powłoki? Grzmotnąć? Jeśli chcesz uruchomić skrypt bash, uruchom go za pomocą skrótu bash.exe. Cel będzie mniej więcej taki:

C:\cygwin\bin\bash.exe foo.bsh 

Ścieżka do pliku bash.exe będzie zależeć od miejsca instalacji cygwin. (W ogóle nie potrzebujesz ścieżki, jeśli katalog bin znajduje się w zmiennej środowiskowej ścieżki).

Możesz zrobić to samo w skrypcie wsadowym, jeśli chcesz. Wiersz poleceń będzie taki sam, jak "cel" powyżej.


EDIT podstawie wypowiedzi (bash nadal zakładając):

Ok, więc w skrypcie wsadowym (.bat) wpisz:

bash.exe script.txt 

Być może trzeba dodać ścieżka do "bash.exe". Jeśli nie masz pewności, gdzie znajduje się "bash.exe", otwórz plik "Cygwin.bat" wymieniony w pytaniu. Powinna mieć ścieżkę w poleceniu chdir. (Uwaga: Cygwin.bat po prostu uruchamia bash.exe w trybie interaktywnym, tak naprawdę nie działa z nickiem o nazwie "cygwin".)

Musisz również dodać ścieżkę do "script.txt", jeśli nie jest w tym samym katalogu, co twój skrypt wsadowy.

Znowu będzie to również działać w skrócie zamiast skryptu wsadowego.

+0

Cóż, chcę uruchomić skrypt powłoki. Ale nie chcę otwierać Cywina, a następnie wpisywać wszystkie te rzeczy, aby go wykonać. Wolałbym po prostu uruchomić plik wsadowy, aby otworzyć cygwin, a następnie zrobić to w ten sposób, jeśli to możliwe. – Aaron

+1

@Aaron - Wpisz wszystko jakie rzeczy? Dowolny wiersz polecenia, w tym argumenty linii poleceń, których używasz do wykonania skryptu w cygwin, można dodać do skrótu lub skryptu wsadowego. Cygwin się nie otworzy, ale pojawi się okno cmd. Powinien się zamknąć, gdy skrypt zakończy działanie. –

+0

Mam skrypt powłoki, który uruchamiam w cygwin. Zastanawiam się, czy mogę utworzyć plik wsadowy, który zrobi to wszystko dla mnie, zamiast wpisywać to wszystko? Ale nie jestem pewien, jak użyć cygwin w pliku wsadowym. – Aaron

8

Można spróbować coś takiego trampolinie z CMD bash (lub cokolwiek SH-wariantu):

: <<TRAMPOLINE 
    @echo off 
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE 
    ##################### 
    #!/bin/bash -- it's traditional! 
    echo "Hello from $SHELL" 
+1

To działało ładnie dla mnie, ale znalazłem, że musiałem użyć końcówek linii w stylu UNIX podczas zapisywania pliku, aby upewnić się, że skrypt bash był szczęśliwy. – gdt

5

Chciałbym rozwinąć na odpowiedź udzieloną przez Austin Hastings aby mogła ona pracować bez Cygwin na ścieżce i do pracy w konfiguracji katalogu z plikiem bat (tak, że używany jest nawet skrót z inną ścieżką "Rozpocznij w"). Zmiany mają zawierać pełną ścieżkę do basha, należy użyć opcji -l, aby poprawnie skonfigurować bash ze ścieżkami i środowiskiem oraz przekazać bieżący katalog do bash jako pierwszy argument, który jest wyskakujący (przy użyciu shift). Pamiętaj, aby używać znaków nowej linii Unix w pliku lub otrzymasz wiele błędów. Używaj także UTF8 zamiast ANSI.

: <<TRAMPOLINE 
@echo off 
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 

Edytuj: Naprawiono kod trampoliny, aby przekazywać argumenty poprawnie do bash. Pliki BAT nie mają bashowego odpowiednika "$ @" i przetwarzają pętlę dla każdego argumentu, a następnie są przekazywane do bash.exe. Teraz poprawnie obsługuje argumenty ze spacjami.

+0

Jak jednak wyjść z tego polecenia? wprowadzenie 'exit/B' po" TRAMPOLINE "nie działa. –

+0

Po prostu wpisz 'exit' jako środowisko po linii' TRAMPOLINE' w 'bash'. 'exit/B' jest poleceniem' cmd'. – galmok

+0

Zapytałem, ponieważ w moim przypadku 'exit' wyglądało, jakby nie działało. Odkąd dowiedziałem się, że to dlatego, że tworzyłem powłokę logowania (-I) i coś w moim '.bashrc' etc tworzyło dodatkowe instancje bash, które kręciły się w tle (zapobiegając w ten sposób wyjściu z zabicia okna cmd) . –

0

Aby uruchomić "your_bash_file" z dowolnego pliku .bat, napisać następującą linię do .bat:

git-bash.exe (path_to_your_bash_file>)

PS: Windows Git jest koniecznie zainstalowany

1

Jeśli chcesz otworzyć skrypt także w kilkudziesięciu oknach, to (na podstawie odpowiedzi @ galmok) zrobi lewy.

: <<TRAMPOLINE 
@echo off 
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 
vim "[email protected]" 

Uwaga: mój use-case była potrzeba, aby otworzyć terminal vim z Visual Studio, dlatego nie jest to wezwanie do vim na końcu. Plik wsadowy zostanie później zamknięty.

Powiązane problemy