Windows'ta .sh dosyası nasıl çalıştırılır?


67

Bir dosyayı (name.sh) komut satırında ./name.sh komutuyla çalıştırmaya çalışırken, şu hatayı alıyorum:

"" bir iç veya dış komut, işletilebilir veya toplu iş dosyası olarak tanınmıyor

Lütfen .sh dosyasını çalıştırmama yardım et

Yanıtlar:


74

Windows CMD.EXE üzerindesiniz (hata iletisinden). Komutları çalıştırmak için farklı bir sözdizimi kullanır. sh name.shCygwin veya benzeri bir sisteminizin kurulu olduğunu varsayarak kullanmanız gerekir.

Netleştirmek için, Windows'un .sh dosyalarını destekleyen yerleşik bir yardımcı programı yoktur. Böyle çalıştırmak için, Cygwin gibi üçüncü taraf bir araç kurmanız gerekir .


7
Git'i Windows'a da kuramaz mısın? Öyle görünüyor ki, bu kabuk komutları Git ile ilgili görevleri gerçekleştirmese bile kabuk komut dosyaları için destek sağlıyor.
DaveTheMinion,

2
@DavidB Evet, işe yarar PATH'inize C: \ Program Files (x86) \ Git \ bin (veya bilgisayarınızda ne varsa) PATH'inize koyarsanız çalışır, çünkü Git burada sh.exe dahil her türlü faydalı araç yerleştirir
Sumyrda

1
@DavidB Evet, Git Bash ne yapacağını biliyor, doğru!
Efsaneler

13

Windows Komut İsteminde bir Linux komutu çalıştırmaya çalışıyorsunuz.

Linux'ta eğik çizgi bir yol ayırıcıdır. Windows'ta ters eğik çizgi bir yol ayırıcıdır ve eğik çizgi genellikle bir argüman gösterir.

Bu nedenle, Windows "." Adlı bir komutu çalıştırmaya çalıştığınızı düşünüyor. ve "/name.sh" argümanını ayrıştırma. Doğru kural ". \ Name.sh" olur. Ek olarak, Windows komutunuz için geçerli dizini otomatik olarak arayacaktır, böylece sadece "name.sh" yazabilirsiniz.

Karşılaşacağınız bir sonraki sorun, Windows'un bir sh betiğinin ne olduğunu bilmemesidir, yine de bu bir Linux olayıdır. Eğer gerçekten bir sh betiği çalıştırmak istiyorsanız veya çalıştırmak istiyorsanız Cygwin'i kurarak bunu çözebilirsiniz.

Ancak, önceki yorumlarınızdan biriyle karar verirseniz, komut dosyasını name.bat olarak yeniden adlandırabilir ve "#! / Bin / sh" satırını silebilirsiniz. Şimdi Windows'un anlaması gereken bir Toplu iş dosyanız var. Toplu iş dosyaları hakkında buradan daha fazla bilgi edinebilirsiniz .


12

Alternatif olarak karanlık tarafa dönebilir ve Linux kurabilirsiniz. İstemden:

sh runide.sh

veya

sudo sh runide.sh

Programınız çalışacak ve siz de daha iyi bir sisteme sahip olacaksınız.


15
Yani "Sadece zengin ve sizin için bunu yapmak için birine ödeme", demek gibi
Funkodebat

7

Bence en iyi çözüm:

  • İndirin ve yükleyin .git for Windows

  • Masaüstünü sağ tıklayın ve "git bash here" deyin

  • Komut dosyanızı unix'teki gibi çalıştırın

  • Bitti!

Dikkat: Birçok komut pencerelerde çalışmaz! Ama yine de, temel şeylerin çoğu işe yarayacak.

Bu betiğe düzenli olarak ihtiyacınız varsa, bir kısayol oluşturmak isteyebilirsiniz (örneğin masaüstünüzde):

  • Bir kısayol oluşturun için mintty.exemasaüstünüzde

  • Kısayolun özelliklerini düzenle ve hedefi değiştir (yolu tut):

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


Bu işe yaramıyor. @FOR / f çalıştırdığımda "tokens = *"% i IN ('docker makinesi env - kabuk cmd varsayılanı') DO @% i. Beklenmedik bir jeton alıyorum (
Steve Tomlin

5

Arabanızı benzin yerine portakal suyu ile çalıştırmaya çalışıyorsunuz. Windows, Unix / Linux / zOS Unix Subsystem / * ix kabuk betiklerinde .bat veya .cmd dosyalarında saklanan benzer komutları, bu iki işletim sistemi ailesi DEC PDP-x makinelerinde ortak bir ata paylaşırken.

Anlık tatma istiyorsanız, "sh.exe" programı veya "csh.exe" veya "bash.exe" programı (tsh.exe herkes?) Sağlayan bir ortam yüklemeniz gerekir.

Alternatif olarak, Unix komut dosyası komutlarını çok iyi biliyorsanız ve Windows .cmd ve .bat dosya komutlarını çok iyi biliyorsanız, .sh dosyasını bir .bat veya .cmd dosyasına çevirebilirsiniz. Buna rağmen, çoğu zaman Windows altında eşdeğeri olmayan daha fazla Unix tarzı programla karşılaşırsınız - grep, sed, vi, emacs, vb. araçlar. Bu özel durumlar için bir flash sürücüye yerleştirin.


3

Birisi /komutlar ve \yollar için MS-DOS hakkında bir şeyler söyledi . Bu biraz yanıltıcıdır. Benim örneğime bak:

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

Etkisi arasında hiçbir fark yoktur. Evet, tüm işlemler için doğru değil - gerçek cevap sadece Hayır , ya da Cygwin veya SSHD olmadan yapamazsınız.

Aptalca ne olduğunu anlamaya çalışırken yarım gün geçirdi çünkü sadece bilmek if then five eval, execile yapmak -Djava.somethingçağrıldığında.



1

UnixUtil adında farklı ve kolay bir çözüm buldum .

C: sürücüsüne indirin ve açın. Ortam değişkeni Set pathdahil etmek C:\UnixUtils\usr\local\wbin.

Bu önemli. İçin yolu ayarlamayınC:\UnixUtils\bin


1

Tamamlanması için, Windows 10 için yeni bir “Linux için Windows Alt Sistemi” özelliğinden bahsetmek istiyorum. Detaylar, http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- bash-kabuk-on-cam-10 /

“Geliştirici Modu” anahtarını etkinleştirmeyi ve “Windows için Windows Alt Sistemi (Beta)” seçeneğini etkinleştirmeyi gerektirdiğini unutmayın.

Benim için Git için Windows yüklemesinin (zaten kullanıyorum) yeterli olduğunu öğrendim.


1

Bu eski bir konu ancak Windows 10 çalıştıranlar için. Yalnızca Windows özelliklerini açıp 'Windows Özelliklerini Aç veya Kapat' kontrol panelinden açın.

'Linux için Windows Alt Sistemi' özelliğini seçin. Kurduktan sonra 'Bash'e sahipsiniz ve hatta yerel Linux sunucularını bash içinde yapılandırabilirsiniz. Ve elbette, bash içindeki sh komutu da işe yarıyor.


0

Sorunun gerçekte dosya içinde olması olasıdır name.sh- .komutu kullanmaya çalışıyorsunuz ancak bunun cshgeçerli bir komut olmadığı bir tür kabuk (örneğin, sanırım) çalıştırmaya çalışıyor .

Yani: name.shDoğru ile başlıyor mu #!/bin/sh(eğer gerçekten koşmaya çalışıyorsanız sh)?


1
evet #! / bin / sh cd başlıyor cd D: \ Raghu D: winzip32.exe -min-a -r D: \ p dosyanın içeriği şu

0

Tamam, Bunda yanlış bir LOT var - #! / bin / sh'i bırakın ve uzantıyı yarasa olarak değiştirin; birkaç düzeltmeyle çalışabilir. O zaman sadece dosya adıyla da onu çağırabilirsin.

Bir unix kabuk betiğinin ve bir windows toplu iş dosyasının sözdizimi aynı değildir. Cygwin, ya da unxutils ile uğraşmak bir yük her ikisi de işe yarayacak bir şey yapabilir, ancak kesinlikle ÇEVRESİNİZ kesinlikle aynı olmadığından emin değilseniz, baş ağrısı değmez


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Ne?! Bunu hiç denemediğinizden şüpheleniyorum ... Windows'ta, en basit bash yetenekleri bile desteklenmiyor ya da uzun sözdizimi gerektiriyor.
Camilo Martin

İkinci paragraf, adil bir çalışma olmadan, çalışmama ihtimalinin yüksek olduğu gerçeğini kapsar.
Journeyman Geek

Haklısın
Camilo Martin,

0

Evinizde (veya işinizde) bir Linux kutunuz varsa ve aynı ağa bağlıysanız ve bu ağ güvenliyse, bu işi yapabilir:

  1. Windows'ta bir klasör paylaşımı yapın (oldukça kolay, ancak ağın davetsiz misafirlere karşı güvenli olduğundan emin olun).
  2. Linux'ta mount //WinMachine/Share LinuxFolder(IIRC ve Samba gerektirir ) kullanın.
  3. PuTTY gibi bir şey kullanarak , o Linux kutusuna uzaktan giriş yapın.
  4. Komutunuzu bağlı klasörde çalıştırın.

0

Kabuk komut dosyasını pencerelerden çalıştırmak için. Önce komutu kullanın: dos2unix sonra normal komutunuzu kullanabilirsiniz: sh runide.sh

Bu işe yarayacak.


Üzgünüz, hafif bir düzeltme yapılması gerekiyor. Komutunu kullanın: "dos2unix runide.sh" Çıktı: dos2unix: runide.sh dosyasını UNIX biçimine dönüştürür ve sonra komutunuzu kullanırsınız: "sh runide.sh" Bu, kesinlikle kabuk komut dosyasını çalıştırır. Mutlu öğrenme
Sridhar GV

Soru dosya formatı ile ilgili değil, pencerelerdeki kabuk eksikliği ile ilgiliydi.
Archemar

0

Burada mevcut cevapları anda doğru olmasına rağmen Windows 10 gelmez artık isteğe dahil tam bir bash kabuğunu çalışan Ubuntu değiştirilmiş bir versiyonunu .

Çalıştırılabilir hale getirildikten sonra, komut dosyaları bash içinden normal şekilde çalıştırılabilir, örneğin:

chmod +x myscript.sh
./myscript.sh

Bir komut dosyasını doğrudan Windows'tan çalıştırmak istiyorsanız, aynı dizinde bir kısayol oluşturabilir ve 'Hedef'i aşağıdaki gibi bir şeye ayarlayabilirsiniz:

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

Komut dosyanızın yolu kısayolun konumuna göre ise (yukarıdaki örnekte olduğu gibi) 'Başlangıç' alanının da boş olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.