เรียกใช้โปรแกรม C ในมินต์จากบรรทัดคำสั่ง windows


0

ฉันต้องการเรียกใช้โปรแกรม C ในมินต์ตี้และเบี่ยงเบนความสนใจ stderr สตรีมเอาต์พุตไปยังไฟล์ debug.txt สิ่งนี้สามารถทำได้โดยใช้:

./zombie_jump 2>debug.txt

อย่างไรก็ตามฉันมีปัญหาเกี่ยวกับสิ่งนี้จากบรรทัดคำสั่งของ Windows

mintty -s 70,55 ./zombie_jump 2>debug.txt

ทำงานเหมือนว่า 2>debug.txt ถูกปล่อยออกจากคำสั่ง (เรียกใช้โปรแกรม แต่ไม่เบี่ยงเบนกระแสข้อผิดพลาด) และ

mintty -s 70,55 "./zombie_jump 2>debug.txt"

ทำงานเป็นถ้าฉันส่ง "./zombie_jump 2 & gt; debug.txt" ทำให้เกิดข้อผิดพลาด Failed to run ./zombie_jump 2>debug.txt: No such file or directory.

ฉันควรใช้คำสั่งอะไร

แก้ไข:

mintty -s 70,55 './zombie_jump 2>debug.txt'

ผลตอบแทน Failed to run ./zombie_jump : No such file or directory และสร้างไฟล์ที่เรียกว่า debug.txt'.


ปัญหาน่าจะเป็นเช่นนั้น mintty ต้องการพารามิเตอร์แยกต่างหากสำหรับคำสั่งที่รันดังนั้นคุณต้องอ้างอิงการเปลี่ยนเส้นทาง การเปลี่ยนเส้นทางจะใช้กับ mintty ตัวเองซึ่งฉันคิดว่าตั้งค่าเส้นทาง I / O มาตรฐานใหม่ หากคุณรวมการเปลี่ยนเส้นทางในเครื่องหมายคำพูดเดียวกับคำสั่งคำสั่งนี้จะกลายเป็นคำสั่งทั้งหมดโดยมองหาชื่อเดียวที่มีอักขระว่างและการเปลี่ยนเส้นทางฝังอยู่ เครื่องหมายคำพูดเดี่ยวไม่มีความหมายพิเศษ cmdดังนั้นการค้นพบครั้งล่าสุดของคุณ
AFH

สองข้อเสนอแนะ: mintty -s 70,55 ./zombie_jump "2>debug.txt" เพื่อหยุดการเปลี่ยนเส้นทางใน cmd; หากสิ่งนี้ล้มเหลวในการสร้าง ./zombie_noerrs มี ./zombie_jump 2>debug.txt และเรียกใช้ mintty -s 70,55 ./zombie_noerrs.
AFH

น่าเสียดายที่คำแนะนำแรกใช้ไม่ได้ผลเช่นเดียวกับความพยายามครั้งที่สองของฉันด้านบน ข้อที่สองก็ไม่เหมาะเช่นกันเนื่องจากฉันพยายามค้นหาคำสั่งที่ฉันสามารถใช้กับ Sublime Text 2 เพื่อเรียกใช้ไฟล์ปัจจุบันที่ฉันกำลังทำงานอยู่
Dimpl

คำตอบ:


1

ข้อผิดพลาดที่นี่ค่อนข้างเข้าใจง่าย: mintty ไม่ส่งต่อผลลัพธ์ของโปรแกรมของคุณไปยัง (สมมุติ) cmdที่ตั้งการเปลี่ยนเส้นทางผลลัพธ์ แต่จะแสดงผลลัพธ์ในหน้าต่าง GUI ของตัวเอง นั่นคือสิ่งที่เทอร์มินัลอีมูเลเตอร์ได้รับการออกแบบให้ทำหลังจากนั้นทั้งหมด :)

การเปลี่ยนเส้นทางเอาต์พุตเป็นคุณลักษณะเชลล์ ถ้าคุณเพิ่งวิ่ง mintty my_commandคุณไม่ได้ใช้เชลล์เลย แทน, mintty เปิดตัวโดยตรง my_command.

ถ้าคุณพูด "my_command 2>out.err"คุณกำลังบอก mintty เพื่อค้นหาคำสั่งของชื่อ (ทั้งหมด) มันเทียบเท่ากับการพิมพ์ "my_command 2>out.err" ในเชลล์ Linux ปกติ จะไม่ทำงานอย่างใดอย่างหนึ่ง

ดังนั้นตอนนี้เราได้สร้างคุณลักษณะเชลล์แล้วมันชัดเจนว่าเราต้องการเชลล์ ตัวเลือกทั่วไปคือ Bash Bash สามารถส่งผ่านสตริงคำสั่งเพื่อดำเนินการเมื่อเริ่มต้นเช่นนี้

bash -c "my_command 2>out.err"

นั่นหมายความว่าเราสามารถใช้สิ่งนี้กับ mintty:

mintty /bin/bash -c "my_command 2>out.err"

บนเครื่องของฉันเปลือก Cygwin Bash เปิดตัวด้วยวิธีนี้สืบทอดไดเรกทอรีการทำงานที่ฉันมี cmd.


ขอบคุณมากสำหรับรายละเอียดนี่เป็นคำตอบที่ยอดเยี่ยม เมื่อฉันพยายามทุบตี ( chat.stackexchange.com/rooms/38465/... ) ฉันไม่มีตัวเลือก -c จึงได้รับ no such file or directory และ cannot execute binary file ข้อผิดพลาด
Dimpl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.