Làm cách nào để chạy .sh trên Windows Command Prompt?


132

Làm cách nào để chạy .sh trên Windows 7 Command Prompt? Tôi luôn gặp lỗi này khi tôi cố chạy dòng này trong đó,

app/build/build.sh

lỗi,

'app' is not recognized...

hoặc là,

bash app/build/build.sh

lỗi,

'bash' is not recognized...

Bất kỳ ý tưởng những gì tôi đã bỏ lỡ?

Đây là màn hình lấy, nhập mô tả hình ảnh ở đây


6
bạn cần cygwin (có thể). Bạn đang cố chạy các tập lệnh SHELL (.sh) trên Windows và đó là cách duy nhất tôi chạy .shcác tệp của mình trên Windows.
ha9u63ar

Câu trả lời:


54

Thông báo lỗi cho biết bạn chưa cài đặt bashhoặc không có trong đó PATH.

Lượt truy cập hàng đầu của Google là http://win-bash.sourceforge.net/ nhưng bạn cũng cần hiểu rằng hầu hết các tập lệnh Bash đều mong đợi một môi trường giống như Unix; vì vậy chỉ cần cài đặt Bash có thể không cho phép bạn chạy tập lệnh bạn tìm thấy trên mạng, trừ khi nó được thiết kế riêng cho kịch bản sử dụng cụ thể này. Giải pháp thông thường cho điều đó là https://www.cygwin.com/ nhưng có nhiều giải pháp thay thế khả thi, tùy thuộc vào chính xác những gì bạn muốn thực hiện.

Nếu Windows không phải là trung tâm trong kịch bản sử dụng của bạn, cài đặt một hệ điều hành miễn phí (có thể là ảo hóa) có thể là cách đơn giản nhất về phía trước.

Thông báo lỗi thứ hai là do Windows trên danh nghĩa chấp nhận dấu gạch chéo chuyển tiếp làm dấu phân cách thư mục, nhưng trong ngữ cảnh này, nó đang được hiểu là dấu phân cách chuyển đổi. Nói cách khác, Windows phân tích cú pháp dòng lệnh của bạn dưới dạng app /build /build.sh(hoặc, để diễn giải với các quy ước tùy chọn Unix, app --build --build.sh). Bạn có thể thử app\build\build.shnhưng nó không có khả năng làm việc, vì các trường hợp được nêu ở trên.


1
Tất nhiên, với Windows 10, bạn có thể kích hoạt WSL và gần như có một máy tính thực sự bên trong Windows của bạn.
tripleee

147

Cài đặt GIT . Trong quá trình cài đặt GIT, thêm GIT Bash vào menu ngữ cảnh của windows bằng cách chọn tùy chọn của nó. Sau khi cài đặt, nhấp chuột phải vào thư mục của bạn, chọn GIT Bash Here(xem pic đính kèm) và sử dụng lệnh sh của bạn như ví dụ:

sh test.sh

nhập mô tả hình ảnh ở đây


1
Nó không làm việc cho tôi. Một cửa sổ nhắc lệnh mở ra sau đó nhanh chóng đóng lại.
desbest

27
Nếu bạn đã cài đặt GIT, bạn có thể thêm vào biến hệ thống PATH một đường dẫn đến sh.exe. Trong trường hợp của tôi đó là : c:\Program Files\Git\bin. Sau đó chạy sh .\script.shtừ PowerShell
elshev

1
Điều này đối với tôi như một cơ duyên trong Windows 10 vào năm 2020! Mặc dù lệnh sao chép / dán không hoạt động đối với tôi vì nó được đặt cố định tại ctrl-insshift-ins
Nam G VU

51

Cách phổ biến nhất để chạy tệp .sh là sử dụng lệnh sh :

C:\>sh my-script-test.sh 

tùy chọn tốt khác là cài đặt CygWin

trong Windowscác hometọa lạc tại:

C:\cygwin64\home\[user]

ví dụ tôi thực thi my-script-test.shtệp của mình bằng lệnh bash là:

jorgesys@INT024P ~$ bash /home/[user]/my-script-test.sh 

43
Trừ khi bạn đã thực hiện các biện pháp đặc biệt để có được nó, bạn sẽ không có shlệnh trên Windows.
user2357112 hỗ trợ Monica

1
Ok -1, bạn có nghĩa là tôi phải thêm một hướng dẫn để có quyền truy cập vào sh từ dòng lệnh ???
Jorgesys

41
Câu trả lời của bạn được trình bày như thể bạn mong đợi có thể gõ shvào dấu nhắc lệnh Windows tùy ý và để nó hoạt động.
user2357112 hỗ trợ Monica

msys2 là một nơi tốt để nhận lệnh sh. Hãy xem github.com/userzimmermann/MSYS2-cmd nếu bạn muốn sử dụng nó với cmd
Aralox

3
Bash và shlệnh, được cài đặt với Git4Windows nếu bạn chọn tùy chọn cài đặt 'Cài đặt Bash'.
Joel Ellis

13

bạn cũng có thể sử dụng cmder

Cmder là gói phần mềm được tạo ra từ sự thất vọng thuần túy khi không có trình giả lập giao diện điều khiển đẹp trên Windows. Nó dựa trên phần mềm tuyệt vời, và được cải tiến với bảng màu Monokai và bố cục nhắc nhở tùy chỉnh, trông thật quyến rũ ngay từ đầu

Ảnh chụp màn hình

cmder.net


1
Mặc dù nó dường như đi kèm với gói bổ trợ tùy chọn bao gồm các lệnh shell Unix phổ biến, gói cơ sở dường như chỉ là một sự thay thế cho cmd.
tripleee

5

Trên Windows 10 Anniversary Update, việc chạy các lệnh shell trong / với bash trên ubfox trên windows thậm chí còn dễ dàng hơn

Tôi đã cố gắng đặt vùng cho bộ định tuyến mạng x-wrt r7000 của mình, tôi thấy cách sau đây hiệu quả với tôi, sử dụng bash trên ubfox trên windows, bạn phải bật hệ thống con được tìm thấy trong các tính năng của windows và chế độ dev

ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh

Có thể chạy. Nhưng đó là một môi trường hoàn toàn khác.
TamusJRoyce

4

Tính năng mới trong Windows - chạy bash trên ubfox trên windows - có sẵn trong bản dựng "Người trong cuộc" của Windows 10 sau hội nghị Build:

https://bloss.windows.com/buildingapps/2016/03/30/run-bash-on-ubfox-on-windows/


Thật tuyệt, nhưng làm thế nào để bạn chạy một shtập tin với bash? Nếu tôi cố gắng làm điều đó, cửa sổ sẽ nhấp nháy và biến mất. Nếu tôi kéo và thả tệp vào một cửa sổ bash đã mở, nó sẽ nói rằng đường dẫn không được tìm thấy (vì nó sử dụng một quy ước khác).
m93a

Ngày nay có thể chạy tệp .sh trên Windows không? Tôi không thể thử ngay bây giờ nhưng tôi rất thích.
JesusMurF

1
Tôi đã không tự mình thử, nhưng có một hướng dẫn của Microsoft về cách chạy sh trên windows: docs.microsoft.com/en-us/windows/wsl/install-win10
claudiu.nicola 16/1/18

@ m93a Trong cửa sổ thiết bị đầu cuối Ubuntu, bash path/to/scriptchạy tập lệnh. Chắc chắn cũng có shtrong Ubuntu. Nếu tập lệnh có một shebang và quyền thích hợp, chỉ cần path/to/scriptchạy nó với rnterpreter được chỉ định trong shebang.
tripleee

4

Cá nhân tôi đã sử dụng tệp bó này, nhưng nó yêu cầu CygWin được cài đặt (64-bit như được hiển thị). Chỉ cần liên kết loại tệp .SH với tệp này (ExecSH.BAT trong trường hợp của tôi) và bạn có thể nhấp đúp vào .SH và nó chạy.

@echo off
setlocal

if not exist "%~dpn1.sh" echo Script "%~dpn1.sh" not found & goto :eof

set _CYGBIN=C:\cygwin64\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & goto :eof

:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn1.sh"') do set _CYGSCRIPT=%%A
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%CD%"') do set _CYGPATH=%%A

:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\mintty.exe -e /bin/bash -l -c 'cd %_CYGPATH%;  %_CYGSCRIPT% %*'

Dựa trên tác phẩm gốc này .


0

Tôi sử dụng Windows 10 Bash shell aka Linux subsystem hay Ubuntu trong Windows 10 như được hướng dẫn ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.