Jak wykonać plik .sh w systemie Windows?


67

Kiedy próbuję wykonać plik (name.sh) w wierszu polecenia za pomocą polecenia ./name.sh, pojawia się błąd:

„.” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, plik operacyjny ani plik wsadowy

pomóż mi wykonać plik .sh

Odpowiedzi:


74

Jesteś w systemie Windows CMD.EXE (z komunikatu o błędzie). Używa innej składni do wykonywania poleceń. Musisz użyć sh name.sh, zakładając, że masz zainstalowany Cygwin lub podobny.

Aby to wyjaśnić, system Windows nie ma wbudowanego narzędzia do obsługi plików .sh. Aby uruchomić takie, musisz zainstalować narzędzie innej firmy, takie jak Cygwin .


7
Czy możesz nie tylko zainstalować Git na Windowsie? Wygląda na to, że powoduje to dodanie obsługi skryptów powłoki, nawet jeśli te skrypty powłoki nie wykonują zadań związanych z Git.
DaveTheMinion,

2
@DavidB Tak, to działa, jeśli umieścisz C: \ Program Files (x86) \ Git \ bin (lub cokolwiek innego na komputerze) w ŚCIEŻCE, ponieważ Git umieszcza tam wszelkiego rodzaju przydatne narzędzia, w tym sh.exe
Sumyrda

1
@DavidB Tak, Git Bash wie, co z tym zrobić, prawda!
Legendy

13

Próbujesz uruchomić polecenie systemu Linux w wierszu polecenia systemu Windows.

W systemie Linux ukośnik jest separatorem ścieżki. W systemie Windows ukośnik odwrotny jest separatorem ścieżki, a ukośnik do przodu ogólnie wskazuje na argument.

Dlatego system Windows myśli, że próbujesz uruchomić polecenie o nazwie „.” i analizując argument „/name.sh”. Prawidłowa konwencja to „. \ Name.sh”. Ponadto system Windows automatycznie przeszuka bieżący katalog w poszukiwaniu Twojego polecenia, więc możesz po prostu wpisać „name.sh”.

Kolejnym problemem, z którym się spotkasz, jest to, że Windows nie wie, co to jest skrypt sh, znowu jest to kwestia Linuksa. Możesz rozwiązać ten problem, instalując Cygwin, jeśli naprawdę chcesz lub musisz uruchomić skrypt sh.

Jednak sądząc po jednym z poprzednich komentarzy, równie dobrze możesz zmienić nazwę skryptu na name.bat i usunąć wiersz „#! / Bin / sh”. Teraz masz plik wsadowy, który system Windows powinien zrozumieć. Możesz przeczytać więcej o plikach wsadowych tutaj .


12

Alternatywnie możesz przejść do ciemnej strony i zainstalować Linuksa. Z pytania:

sh runide.sh

lub

sudo sh runide.sh

Twój program uruchomi się, a ty będziesz mieć także lepszy system.


15
To tak, jakby powiedzieć: „Po prostu
wzbogac

7

Moim zdaniem najlepsze rozwiązanie:

  • Pobierz i zainstaluj .git dla Windows

  • Kliknij pulpit prawym przyciskiem myszy i powiedz „tutaj git bash”

  • Wykonaj skrypt jak w Uniksie

  • Gotowy!

Uwaga: Wiele poleceń nie działa w systemie Windows! Ale nadal wiele podstawowych rzeczy będzie działać.

Jeśli potrzebujesz tego skryptu regularnie, możesz utworzyć skrót (np. Na pulpicie):

  • Utwórz skrót do mintty.exena pulpicie

  • Edytuj właściwości skrótu i ​​zmień cel (zachowaj ścieżkę):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


To nie działa. Kiedy uruchamiam @FOR / f "tokeny = *"% i IN ('Env docker-machine en --shell cmd default') DO @% i. Dostaję nieoczekiwany token (
Steve Tomlin,

5

Próbujesz uruchomić samochód na soku pomarańczowym zamiast benzyny. System Windows udostępnia podobne polecenia przechowywane w plikach .bat lub .cmd ze skryptami powłoki Unix / Linux / zOS Unix Subsystem / * ix, ponieważ te dwie rodziny systemów operacyjnych mają wspólnego przodka maszyn DEC PDP-x.

Jeśli chcesz natychmiastowej gratyfikacji, musisz zainstalować środowisko, które zapewnia program „sh.exe” lub „csh.exe” lub „bash.exe” (czy ktos tsh.exe?)

Alternatywnie, jeśli znasz komendy skryptowe w systemie Unix, bardzo dobrze i znasz komendy plików .cmd i .bat dla systemu Windows, bardzo dobrze możesz przetłumaczyć plik .sh na plik .bat lub .cmd. Mimo to często spotyka się więcej programów w stylu uniksowym, które nie mają odpowiedników w systemie Windows - grep, sed, vi, emacs itp. Zatem wezwanie do zainstalowania CygWin (bez minimalisty) - tylko w celu uzyskania powłoki i Uniksa przybory. Na specjalne okazje umieść go na dysku flash.


3

Ktoś powiedział coś o MS-DOS używającym /poleceń i \ścieżek. Jest to nieco mylące. Spójrz na mój przykład:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

Nie ma różnicy w działaniu. Tak, nie jest to prawdą we wszystkich operacjach - rzeczywista odpowiedź brzmi po prostu Nie , lub bez Cygwin lub SSHD nie możesz.

Wiem tylko, bo głupio spędził pół dnia próbuje dowiedzieć się, co if then fii eval, execzrobić z -Djava.somethingpo nazwie.



1

Znalazłem inne i łatwe rozwiązanie o nazwie UnixUtil .

Pobierz i rozpakuj go na dysk C: Ustaw zmienną środowiskową, pathaby uwzględnić C:\UnixUtils\usr\local\wbin.

To jest ważne. NIE ustawiaj ścieżki naC:\UnixUtils\bin



1

To jest stary wątek, ale dla osób z systemem Windows 10. Wystarczy otworzyć funkcje systemu Windows z panelu sterowania „Włącz lub wyłącz funkcje systemu Windows”

Wybierz funkcję „Podsystem Windows dla systemu Linux”. Po instalacji masz „Bash”, a nawet możesz skonfigurować natywne serwery Linux w bash. Oczywiście działa również polecenie sh w ramach bash.


0

Możliwe, że problem rzeczywiście występuje w pliku name.sh- próbujesz użyć .polecenia, ale próbuje uruchomić rodzaj powłoki (np. cshMyślę, że), w której to polecenie nie jest poprawne.

Więc: czy name.shzaczyna się od poprawnego #!/bin/sh(jeśli faktycznie próbujesz uruchomić sh)?


1
tak, zaczyna się #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p to jest zawartość pliku

0

ok, jest w tym DUŻO nie tak - upuść #! / bin / sh i zmień rozszerzenie na bat, a może działać z kilkoma dodatkowymi poprawkami. Następnie możesz po prostu wywołać go również według jego nazwy pliku.

Składnia skryptu powłoki unix i plik wsadowy systemu Windows nie są zbyt podobne. cygwin lub mnóstwo bałaganu z unxutils może stworzyć coś, co zadziałałoby w obu przypadkach, ale jeśli absolutnie nie jesteś pewien, że środowisko jest zawsze takie samo, nie jest to warte bólu głowy


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Co?! Podejrzewam, że nigdy tego nie próbowałeś ... W systemie Windows nawet najprostsze funkcje bash nie są obsługiwane lub wymagają długiej składni.
Camilo Martin

Drugi akapit dotyczy faktu, że najprawdopodobniej nie będzie działał bez odpowiedniej ilości pracy.
Journeyman Geek

Masz rację.
Camilo Martin

0

Jeśli masz Linux-a w domu (lub w pracy) i podłączony do tej samej sieci, a ta sieć jest bezpieczna, może to załatwić sprawę:

  1. Udostępnij folder w systemie Windows (całkiem proste, ale upewnij się, że sieć jest bezpieczna przed intruzami).
  2. Zamontuj go w systemie Linux za pomocą mount //WinMachine/Share LinuxFolder(IIRC i wymaga Samby ).
  3. Używając czegoś takiego jak PuTTY , zaloguj się zdalnie do tego Linux-a.
  4. Uruchom polecenie w zamontowanym folderze.

0

Aby uruchomić skrypt powłoki z systemu Windows. Najpierw użyj polecenia: dos2unix, a następnie możesz użyć zwykłego polecenia: sh runide.sh

To się uda.


Przepraszamy, należy wprowadzić niewielką korektę. Użyj polecenia: „dos2unix runide.sh” Dane wyjściowe: dos2unix: konwersja pliku runide.sh do formatu UNIX, a następnie użyj polecenia: „sh runide.sh” Z pewnością uruchomisz skrypt powłoki. Miłej nauki
Sridhar GV

pytanie nie dotyczyło formatu pliku, ale raczej braku powłoki w systemie Windows.
Archemar

0

Chociaż dotychczasowe odpowiedzi tutaj były poprawne w momencie, Windows 10 ma teraz ewentualnie zawierać zmodyfikowaną wersję Ubuntu działa pełną powłoki bash .

Po utworzeniu pliku wykonywalnego skrypty można uruchamiać w zwykły sposób z poziomu basha, np .:

chmod +x myscript.sh
./myscript.sh

Jeśli chcesz uruchomić skrypt bezpośrednio z systemu Windows, możesz utworzyć skrót w tym samym katalogu i ustawić „Cel” na coś takiego:

C:\Windows\System32\bash.exe -c "./myscript.sh"

Jeśli ścieżka skryptu zależy od położenia skrótu (jak w powyższym przykładzie), upewnij się, że pole „Rozpocznij w” jest również puste.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.