2011-11-27 81 views
18

我知道Cygwin安裝時有一個批處理文件,用於在Windows中啓動它。但如果我想運行腳本而不啓動Cygwin並執行「./script」Cygwin從一個批處理文件運行腳本?

如何創建批處理文件來執行此操作?

由於...只有一個批處理文件,單擊時會打開Cygwin並運行shell腳本。

回答

27

運行「foo.bsh」,創建一個批處理文件包含以下內容並運行它:

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

的「C:\ cygwin的\ BIN」部分可以根據您選擇的安裝位置不同cygwin的。

+0

是的,這工作..謝謝 – dhroove

3

什麼樣的shell腳本?擊?如果您需要運行bash腳本,只需通過快捷方式使用bash.exe運行即可。目標會是這樣的:

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

到bash.exe將取決於安裝的cygwin所在的路徑。 (如果bin目錄位於路徑環境變量中,則根本不需要路徑。)

如果需要,可以在批處理腳本中執行同樣的操作。命令行將與上面的「目標」相同。


編輯基於評論(仍然假設的bash):

好了,在你的批處理腳本(.bat)的形式只需鍵入:

bash.exe script.txt 

您可能需要添加路徑到「bash.exe」。如果您不確定「bash.exe」的位置,請打開您在問題中提到的「Cygwin.bat」文件。它應該有一個chdir命令中的路徑。 (注意:Cygwin.bat只是在交互模式下運行bash.exe,它並不真正運行任何名爲「cygwin」的東西)。

如果不是,則還需要將路徑添加到「script.txt」與批處理腳本位於相同的目錄中。

再次,這也將工作在一個快捷方式,而不是批處理腳本。

+0

那麼,我想運行一個shell腳本。但我不想打開Cywgin然後輸入所有的東西來執行它。我寧願運行一個批處理文件來打開cygwin,然後在可能的情況下這樣做。 – Aaron

+1

@Aaron - 鍵入所有的東西?任何用於在cygwin中執行腳本的命令行(包括命令行參數)都可以添加到快捷方式或批處理腳本中。 Cygwin不會打開,但一個cmd窗口將會打開。腳本運行完畢後它應該關閉。 –

+0

我有一個我在cygwin中運行的shell腳本。我想知道是否可以創建一個批處理文件,而不是全部輸入這些文件?但我不確定如何在批處理文件中使用cygwin。 – Aaron

8

你可以嘗試這樣的事情蹦牀從CMD到BASH(或任何SH-變體):

: <<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

這對我很好,但我發現我不得不使用UNIX風格線結束時保存文件,以確保bash腳本很高興。 – gdt

5

我想在奧斯汀黑斯廷斯給出的答案擴展到允許不工作Cygwin在路徑中,並使用bat文件在目錄設置中工作(因此即使是使用不同「Start in」路徑的快捷方式也是如此)。所做的更改包括bash的完整路徑,使用選項-l可以使用路徑和環境正確設置bash,並將當前目錄作爲彈出的第一個參數(使用shift)傳遞給bash。請記住在文件中使用Unix換行符,否則會出現很多錯誤。也使用UTF8代替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 

編輯:修正了將參數正確傳遞給bash的蹦牀代碼。 BAT文件沒有與「$ @」相同的bash,並且處理每個參數的循環都被創建並傳遞給bash.exe。現在用空格正確處理參數。

+0

儘管我們如何退出此命令?在'TRAMPOLINE'不起作用後放置'exit/B'。 –

+0

只需在'TRAMPOLINE'行'bash'後輸入'exit'作爲環境。 'exit/B'是一個'cmd'命令。 – galmok

+0

我問,因爲在我的情況'退出'看起來不起作用。我後來發現,那是因爲我正在創建一個登錄shell(-I),而在''.bashrc'等內容中創建了額外的bash實例,這些實例在後臺懸掛(因此防止從cmd窗口中殺死) 。 –

0

要從任何bat文件運行 「your_bash_file」,寫入下面一行.BAT:

GIT-bash.exe(path_to_your_bash_file>)

P.S. Windows Git是必要的安裝

1

如果你想打開腳本在一個薄荷窗口以及,這(基於@ galmok的答案)將做的伎倆。

: <<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]" 

注:我用例是從Visual Studio,這也就是爲什麼在年底vim調用打開一個終端VIM的需要。該批處理文件將在之後退出。

相關問題