วิธีการเรียกใช้ไฟล์. sh บน Windows


67

เมื่อฉันพยายามเรียกใช้ไฟล์ (name.sh) ในบรรทัดคำสั่งโดยคำสั่ง. / name.sh ฉันได้รับข้อผิดพลาดที่:

"" ไม่รู้จักว่าเป็นคำสั่งภายในหรือภายนอก, สามารถใช้งานได้หรือแบตช์ไฟล์

โปรดช่วยฉันเรียกใช้ไฟล์. sh

คำตอบ:


74

คุณใช้ Windows CMD.EXE (จากข้อความแสดงข้อผิดพลาด) มันใช้ไวยากรณ์ที่แตกต่างเพื่อดำเนินการคำสั่ง คุณจะต้องใช้sh name.shสมมติว่าคุณมี Cygwin หรือติดตั้งที่คล้ายกัน

เพื่อชี้แจง, Windows ไม่มียูทิลิตี้ในตัวเพื่อรองรับไฟล์. sh เมื่อต้องการเรียกเช่นนี้คุณจะต้องติดตั้งเครื่องมือของบุคคลที่สามเช่นCygwin


7
คุณสามารถติดตั้ง Git บน Windows ได้หรือไม่ ดูเหมือนว่าการทำเช่นนั้นจะเพิ่มการสนับสนุนเชลล์สคริปต์แม้ว่าเชลล์สคริปต์เหล่านั้นจะไม่ทำงานที่เกี่ยวข้องกับ Git
DaveTheMinion

2
@DavidB ใช่มันใช้งานได้ถ้าคุณใส่ C: \ Program Files (x86) \ Git \ bin (หรืออะไรก็ตามที่อยู่ในคอมพิวเตอร์ของคุณ) ใน PATH ของคุณเพราะ Git วางเครื่องมือที่มีประโยชน์ทุกประเภทไว้ที่นั่นรวมถึง sh.exe
Sumyrda

1
@DavidB ใช่ Git Bash รู้ว่าต้องทำอะไรถูกต้อง!
ตำนาน

13

คุณกำลังพยายามเรียกใช้คำสั่ง Linux ที่พร้อมรับคำสั่งของ Windows

บน Linux เครื่องหมายฟอร์เวิร์ดสแลชเป็นตัวคั่นพา ธ บน Windows เครื่องหมายแบ็กสแลชเป็นตัวคั่นพา ธ และโดยทั่วไปสแลชสแลชหมายถึงอาร์กิวเมนต์

ดังนั้น Windows คิดว่าคุณพยายามเรียกใช้คำสั่ง "" และแยกอาร์กิวเมนต์เป็น "/name.sh" การประชุมที่ถูกต้องจะเป็น ". \ name.sh" นอกจากนี้ Windows จะค้นหาไดเรกทอรีปัจจุบันสำหรับคำสั่งของคุณโดยอัตโนมัติดังนั้นคุณสามารถพิมพ์ "name.sh"

ปัญหาต่อไปที่คุณจะเผชิญคือ Windows ไม่รู้ว่าตัวเองกำลังเขียนบทอะไรอีกครั้งนี่เป็นเรื่องของลีนุกซ์ คุณสามารถแก้ปัญหานี้ได้โดยติดตั้ง Cygwin หากคุณต้องการหรือต้องการรันสคริปต์ sh

อย่างไรก็ตามการตัดสินโดยหนึ่งในความคิดเห็นก่อนหน้าของคุณคุณก็สามารถเปลี่ยนชื่อสคริปต์เป็น name.bat และลบบรรทัด "#! / bin / sh" ตอนนี้คุณมีไฟล์รุ่นที่ Windows ควรเข้าใจ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับไฟล์ชุดที่นี่


12

หรือคุณอาจหันไปทางด้านมืดและติดตั้ง Linux จากพรอมต์:

sh runide.sh

หรือ

sudo sh runide.sh

โปรแกรมของคุณจะทำงานและคุณจะมีระบบที่ดีขึ้นเช่นกัน


15
นั่นก็เหมือนกับการพูดว่า "แค่รวยและจ่ายให้ใครสักคนทำเพื่อคุณ"
Funkodebat

7

ทางออกที่ดีที่สุดในความคิดของฉัน:

  • ดาวน์โหลดและติดตั้ง. git สำหรับ Windows

  • คลิกขวาที่เดสก์ท็อปแล้วพูดว่า"git bash here"

  • รันสคริปต์ของคุณเหมือนในยูนิกซ์

  • ทำ!

ข้อควรระวัง: คำสั่งจำนวนมากจะไม่ทำงานบน windows! แต่ถึงกระนั้นสิ่งพื้นฐานหลายอย่างก็ใช้งานได้

หากคุณต้องการสคริปต์นั้นเป็นประจำคุณอาจต้องการสร้างทางลัด (บนเดสก์ท็อปของคุณ):

  • สร้างทางลัดไปยังmintty.exeบนเดสก์ท็อปของคุณ

  • แก้ไขคุณสมบัติของทางลัดและเปลี่ยนเป้าหมาย (เก็บพา ธ ):

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


มันใช้งานไม่ได้ เมื่อฉันเรียกใช้ @FOR / f "tokens = *"% i IN ('นักเทียบท่าเครื่อง env - เริ่มต้นเชลล์ cmd') DO @% i ฉันได้รับโทเค็นที่ไม่คาดคิด (
Steve Tomlin

5

คุณกำลังพยายามขับรถด้วยน้ำส้มแทนน้ำมันเบนซิน Windows ใช้คำสั่งที่คล้ายกันซึ่งเก็บไว้ในไฟล์. bat หรือ. cmd กับสคริปต์เชลล์ Unix / Linux / zOS ระบบปฏิบัติการ Unix Subsystem / * ix เนื่องจากระบบปฏิบัติการสองตระกูลนี้ใช้บรรพบุรุษร่วมกันกับเครื่อง DEC PDP-x

หากคุณต้องการความพึงพอใจทันทีคุณจะต้องติดตั้งสภาพแวดล้อมที่มีโปรแกรม "sh.exe" หรือ "csh.exe" หรือ "bash.exe" (tsh.exe ทุกคน?)

อีกวิธีหนึ่งถ้าคุณรู้จักคำสั่งสคริปต์ Unix ได้ดีมากและคุณรู้จักคำสั่งไฟล์ Windows .cmd และ. bat คุณสามารถแปลไฟล์. sh เป็นไฟล์. bat หรือ. cmd ได้ ถึงอย่างนั้นคุณก็มักจะพบกับโปรแกรม Unix ที่ไม่เทียบเท่า Windows, grep, sed, vi, emacs เป็นต้นดังนั้นการเรียกใช้เพื่อติดตั้ง CygWin (ไม่ใช้ความเรียบง่าย) - เพียงแค่รับเชลล์และ Unix เครื่องมือ ใส่ในแฟลชไดรฟ์สำหรับโอกาสพิเศษเหล่านี้


3

มีคนพูดบางอย่างเกี่ยวกับ MS-DOS ที่ใช้/สำหรับคำสั่งและ\เส้นทาง นี่เป็นสิ่งที่ทำให้เข้าใจผิดเล็กน้อย ดูตัวอย่างของฉัน:

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

ไม่มีผลแตกต่างกัน ใช่มันไม่เป็นความจริงสำหรับการดำเนินการทั้งหมด - คำตอบที่แท้จริงคือเพียงไม่หรือไม่มี Cygwin หรือ SSHD คุณไม่สามารถทำได้

ฉันรู้ว่าเพียงเพราะฉันโง่ใช้เวลาครึ่งวันพยายามที่จะคิดออกว่าif then fiและeval, execทำอย่างไรกับ-Djava.somethingเมื่อเรียก


2

ใช้ Github สำหรับ Windows มันมีทั้งหมดสภาพแวดล้อมปฏิบัติการยูนิกซ์

https://github-windows.s3.amazonaws.com/GitHubSetup.exe


1
โดยเฉพาะอย่างยิ่งติดตั้ง Git เหตุผลเดียวที่ติดตั้ง Github สำหรับ Windows มี Bash shell เพราะมันมาพร้อมกับ Git :)
ZaLiTHkA

ทางเลือกที่ดีขอบคุณดังนั้นไม่จำเป็นต้องติดตั้งเครื่องมือเพิ่มเติม +1
Guilherme Nascimento

1

ผมพบว่าวิธีการแก้ปัญหาที่แตกต่างกันและง่ายต่อการเรียกUnixUtil

ดาวน์โหลดและแตกไฟล์ลงในไดรฟ์ C: ตั้งค่าตัวแปรสภาพแวดล้อมที่จะรวมpathC:\UnixUtils\usr\local\wbin

นี้เป็นสิ่งสำคัญ. อย่าตั้งค่าพา ธ ไปที่C:\UnixUtils\bin


1

เพื่อความสมบูรณ์ฉันต้องการพูดถึงคุณลักษณะใหม่“ Windows Subsystem สำหรับ Linux” สำหรับ Windows 10 รายละเอียดได้อธิบายไว้ในhttp://www.howtogeek.com/249966/how-to-install-and-use-the-linux- ทุบตีเปลือก-on-Windows-10 /

โปรดทราบว่ามันต้องเปิดใช้งานสวิตช์ "โหมดนักพัฒนาซอฟต์แวร์" และเปิดใช้งานตัวเลือก "ระบบย่อย Windows สำหรับ Linux (เบต้า)"

สำหรับตัวฉันเองฉันพบว่าการติดตั้ง Git สำหรับ Windows (ที่ฉันใช้อยู่) เพียงพอแล้ว


1

นี่เป็นเธรดเก่า แต่สำหรับผู้ที่ใช้ Windows 10 เพียงเปิดฟีเจอร์ windows จากแผงควบคุม 'เปิดหรือปิดฟีเจอร์ Windows'

เลือกคุณสมบัติ 'Windows Subsystem สำหรับ Linux' หลังจากติดตั้งคุณมี 'Bash' และคุณยังสามารถกำหนดค่าเซิร์ฟเวอร์ Linux ภายในการทุบตี และแน่นอนคำสั่ง sh ภายใน bash ก็ทำงานได้เช่นกัน


0

เป็นไปได้ว่าปัญหาเกิดขึ้นจริงภายในไฟล์name.sh- คุณพยายามใช้.คำสั่ง แต่พยายามเรียกใช้เชลล์ชนิดหนึ่ง (เช่นcshฉันคิดว่า) ซึ่งไม่ใช่คำสั่งที่ถูกต้อง

ดังนั้น: ไม่name.shเริ่มต้นด้วยการที่ถูกต้อง#!/bin/sh(ถ้าคุณเป็นจริงพยายามที่จะใช้sh)?


1
ใช่มันจะเริ่มต้น #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p นั่นคือเนื้อหาของไฟล์

0

ตกลงมีจำนวนมากผิดปกติกับที่ - วาง #! / bin / sh และเปลี่ยนการขยายเป็นค้างคาวและมันอาจทำงานกับการแก้ไขเพิ่มเติมอีกไม่กี่ จากนั้นคุณสามารถเรียกใช้โดยใช้ชื่อไฟล์ได้เช่นกัน

ไวยากรณ์ของสคริปต์ยูนิกซ์เชลล์และไฟล์แบตช์ windows ไม่ได้คล้ายกันมากเกินไป cygwin หรือภาระที่ยุ่งเหยิงกับ unxutils อาจทำให้บางสิ่งบางอย่างทำงานได้ทั้งสองอย่าง แต่ถ้าคุณไม่แน่ใจว่าสภาพแวดล้อมนั้นเหมือนกันเสมอมันไม่คุ้มค่าที่จะปวดหัว


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.อะไร?! ฉันสงสัยว่าคุณไม่เคยลองสิ่งนี้ ... ใน Windows แม้ความสามารถในการทุบตีที่ง่ายที่สุดจะไม่ได้รับการสนับสนุนหรือต้องการไวยากรณ์ที่มีความยาวมาก
Camilo Martin

ย่อหน้าที่สองครอบคลุมความจริงที่ว่ามันมีแนวโน้มที่จะไม่ทำงานโดยไม่ต้องมีปริมาณงานพอสมควร
Geek

คุณพูดถูก
Camilo Martin

0

หากคุณมีกล่อง Linux ในบ้าน (หรือที่ทำงาน) และเชื่อมต่อกับเครือข่ายเดียวกันและเครือข่ายนี้ปลอดภัยนี่อาจเป็นเคล็ดลับ:

  1. สร้างโฟลเดอร์แชร์บน Windows (ค่อนข้างง่าย แต่ให้แน่ใจว่าเครือข่ายปลอดภัยจากผู้บุกรุก)
  2. ติดตั้งใน Linux ด้วยmount //WinMachine/Share LinuxFolder(IIRC และต้องใช้Samba )
  3. ใช้บางอย่างเช่นPuTTYล็อกอินจากกล่อง Linux นั้นจากระยะไกล
  4. เรียกใช้คำสั่งของคุณในโฟลเดอร์ที่เมาท์

0

เพื่อรันเชลล์สคริปต์จากหน้าต่าง ใช้คำสั่งแรก: dos2unix จากนั้นคุณสามารถใช้คำสั่งปกติของคุณ: sh runide.sh

สิ่งนี้จะได้ผล


ขออภัยต้องแก้ไขเล็กน้อย ใช้คำสั่ง: "dos2unix runide.sh" เอาต์พุต: dos2unix: การแปลงไฟล์ runide.sh เป็นรูปแบบ UNIX จากนั้นคุณใช้คำสั่งของคุณ: "sh runide.sh" นี่จะทำให้คุณเรียกใช้เชลล์สคริปต์ การเรียนรู้ที่มีความสุข
Sridhar GV

คำถามไม่เกี่ยวกับรูปแบบไฟล์ แต่เกี่ยวกับการขาดเชลล์ใน windows
Archemar

0

ถึงแม้ว่าคำตอบที่มีอยู่ที่นี่มีความถูกต้องในเวลาที่ใช้ Windows 10 ไม่ตอนนี้เลือกที่จะรวมถึงรุ่นล่าสุดของอูบุนตูทำงานเปลือกทุบตีเต็ม

เมื่อทำการเอ็กซีคิ้วท์แล้วสคริปต์จะสามารถทำงานได้ตามปกติจากภายในการทุบตีเช่น:

chmod +x myscript.sh
./myscript.sh

หากคุณต้องการเรียกใช้สคริปต์โดยตรงจาก Windows คุณสามารถสร้างทางลัดในไดเรกทอรีเดียวกันและตั้งค่า 'เป้าหมาย' เป็นดังนี้:

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

หากเส้นทางของสคริปต์ของคุณสัมพันธ์กับตำแหน่งของทางลัด (เช่นตัวอย่างด้านบน) ให้แน่ใจว่าฟิลด์ 'เริ่มต้นใน' ว่างเปล่าเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.