เรียกใช้ cmd.exe จากภายใน Cygwin


16

ฉันต้องการใช้ Cygwin สำหรับเชลล์หลักที่ทำงาน แต่กลุ่มของฉันใช้แบตช์ไฟล์สำหรับกระบวนการหลายอย่าง ฉันได้รับแจ้งว่าฉันสามารถทำได้cmd /c batch.batเพื่อเรียกใช้ไฟล์แบตช์จาก Cygwin สิ่งนี้ใช้ได้กับบางกรณีและไม่ใช่สำหรับคนอื่น หนึ่งในแบตช์ไฟล์ล้มเหลวอย่างสมบูรณ์เมื่อฉันทำเช่นนี้ แต่ทำงานได้ดีเมื่อฉันเรียกใช้จาก cmd shell

ความแปลกประหลาดอีกอย่างที่ฉันสังเกตเห็นคือถ้าฉันวิ่งcmd /?จาก Cygwin ฉันจะไม่ได้รับผลใด ๆ การรันสิ่งนี้จาก cmd shell ให้ความช่วยเหลือแบบมาตรฐาน แม้การทำcmd /c cmd /?ไม่ส่งออก ถ้าฉันวิ่งcmdจาก Cygwin มันจะให้เปลือก cmd แก่ฉันและถ้าฉันวิ่งcmd /?ฉันจะได้รับข้อความช่วยเหลือ แต่ไม่มีการแบ่งหน้า

ฉันเดาว่าสิ่งต่อไปที่จะลองคือหาวิธีที่จะเปิด cmd จริง ๆ ภายในหน้าต่างที่แตกต่างของตัวเองราวกับว่าคุณได้ไปที่ Start-> Run แล้วพิมพ์ "cmd" มีวิธีการทำเช่นนี้จากภายใน Cygwin หรือไม่?

คำตอบ:


8

/?ถือเป็นรูปแบบโดย bash โดยที่เครื่องหมายคำถามจะพอดีกับอักขระตัวเดียวดังนั้นหากคุณมีไฟล์หนึ่งตัวอักษรหรือไดเรกทอรีใด ๆ ในราก Cygwin ของคุณรูปแบบจะถูกแทนที่ด้วยสิ่งเหล่านั้น echo /?จะแสดงให้คุณเห็นว่าเป็นสิ่งที่เกิดขึ้น /\?คุณสามารถหลบหนีเครื่องหมายคำถามด้วยเครื่องหมายทับขวา: '/?'หรือพูดอาร์กิวเมนต์ทั้งหมด:

cygstart c:/windows/system32/cmd จะเริ่ม cmd.exe ในหน้าต่างของตัวเอง


ใน win xp sp2 ของฉัน latop โค้ดต่อไปนี้จะทำงาน: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao

14

คุณสามารถเรียกใช้ไฟล์ชุดจาก Cygwin cmdเปลือกโดยตรงคุณไม่จำเป็นต้องมีสายกลาง หากไฟล์แบตช์ต้องมีอาร์กิวเมนต์จะต้องมีการเสนอราคาในรูปแบบ Windows cmd /c 'foo.bat "quoted arguments"'มันอาจจะง่ายต่อการทำงาน

คุณไม่ได้พูดในสิ่งที่ terminal คุณใช้เปลือก ไฟล์แบตช์ด้วยตนเองไม่สนใจเกี่ยวกับสิ่งนั้น แต่คำสั่งที่ดำเนินการจากไฟล์แบตช์อาจ ตัวจำลองเทอร์มินัลของ Cygwin ไม่ได้จำลองคอนโซลของ Windows ดังนั้นจึงเหมาะสำหรับโปรแกรม Cygwin และสำหรับโปรแกรม stdio เท่านั้น แต่ไม่ใช่สำหรับโปรแกรมคอนโซล Windows

หากโดยปกติเรียกใช้ Cygwin shells ในเทอร์มินัล Cygwin (เช่น rxvt หรือ mintty) คุณสามารถเรียกใช้ไฟล์แบทช์ปัญหาในคอนโซล Windows แยกต่างหากstart foo.batได้ คุณอาจต้องการเรียกใช้Console2เพื่อทดแทนคอนโซล Windows และรันแอปพลิเคชันคอนโซล Windows ในแอปพลิเคชัน Console2 และ Cygwin ในเทอร์มินัล Cygwin (หรือแม้แต่ใน Console2)

cmd /?เป็นปลาเฮอริ่งแดง: มีไดเรกทอรียาวหนึ่งตัวอักษรในไดเรกทอรีราก Cygwin ดังนั้นเชลล์จึงขยาย/?และเรียกใช้cmdด้วยสวิตช์ที่ไม่เกิดผลลัพธ์


ฉันต้องการวางตัวแปรเชลล์ลงในอาร์กิวเมนต์ cmd ดังนั้นฉันคิดว่าต่อไปนี้สามารถแก้ไข Bash และ cmd parsers: u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x - (TTT )} 'd = $' \ "'cmd / c foo.bat -u% d %% u %% d% -p% d %% p %% p% d% -fooBar% d %% r %% d% - fooBAR true
eel ghEEz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.