ฉันจะเปลี่ยนเส้นทาง stderr เท่านั้นได้อย่างไร


13

ฉันมีปัญหาเล็กน้อยในการทำเช่นนี้ ฉันต้องเรียกใช้ไฟล์. java ที่คอมไพล์แล้วและเปลี่ยนเส้นทางเฉพาะ stderr ไปยังไฟล์ที่เรียกว่าข้อผิดพลาด ดังนั้นไฟล์. java จึงมีชื่อว่า javaProgram.java

นี่คือสิ่งที่ฉันได้ลอง:

java javaProgram 2> error

อย่างไรก็ตามเมื่อฉัน

cat error

ปรากฏว่ามีสิ่งต่าง ๆ อยู่ในนั้นแม้ว่าฉันจะรู้ว่าไฟล์. java เฉพาะนั้นไม่มีข้อผิดพลาดก็ตาม ฉันกำลังทำอะไรผิดหรือเปล่า? สิ่งที่ฉันต้องการให้ไฟล์แสดงข้อผิดพลาดนี้เป็นข้อผิดพลาดไม่ใช่อย่างอื่น

คำตอบ:


16

ความพยายามครั้งแรกของคุณถูกต้อง 2>filenameเป็นวิธีที่คุณเปลี่ยนเส้นทาง stderr อาจเป็นกรณีที่โปรแกรมของคุณกำลังเขียนข้อผิดพลาดที่ไม่ผิดพลาดไปยัง stderr หรือโปรแกรม java กำลังเรียกใช้โปรแกรมอื่นที่ส่งออกไปยัง stderr


1

คำตอบง่ายๆคือมันเป็นไปไม่ได้ ข้อผิดพลาดมาตรฐานใช้สำหรับการเขียนเอาต์พุตการวินิจฉัยและขึ้นอยู่กับแอปพลิเคชันเพื่อกำหนดเอาต์พุตการวินิจฉัย / ข้อผิดพลาด ที่เป็นไปตามมาตรฐาน POSIX


2
หากคุณกำลังจะอ้างถึงข้อมูลจำเพาะของ POSIX โปรดอ้างอิงหัวข้อเฉพาะและไม่ใช่เอกสารทั้งหมด มันใหญ่.
jordanm

ตั้งแต่เมื่อใดจึงไม่สามารถเปลี่ยน stderr ไปยังไฟล์ใน POSIX คุณจะต้องให้ใบเสนอราคาจริงสำหรับสิ่งนั้น
l0b0

1
@ l0b0 นั่นไม่ใช่สิ่งที่ Jeight พูด มันขึ้นอยู่กับแอพพลิเคชั่นที่จะตัดสินใจว่าจะไปที่ STDOUT และอะไรคือ STDERR มันจะเป็นไปได้โดยสิ้นเชิงที่จะผลักทุกอย่างเข้าไปใน STDOUT ตัวอย่างจากนั้นการเปลี่ยนเส้นทาง STDERR จะไม่มีผลกระทบใด ๆ หรืออย่างเช่นในกรณีนี้อาจเป็นไปได้ (และวิธีปฏิบัติมาตรฐาน) เพื่อนำบางสิ่งที่ไม่ผิดพลาดไปสู่ ​​STDERR วิธีเดียวที่จะเป็นไปได้ที่จะแยกวิเคราะห์ข้อผิดพลาดจากการวินิจฉัยอื่น ๆ ก็คือถ้าข้อผิดพลาดถูกทำเครื่องหมายด้วย 'ข้อผิดพลาด:' หรือบางสิ่งบางอย่าง อาจมีสวิตช์แบบละเอียดที่สามารถช่วยได้ แต่นั่นเป็นโปรแกรมเฉพาะ
evilsoup

OP ได้วางปัญหาที่แตกต่างกันสองทางไว้: "เปลี่ยนเส้นทางเฉพาะ stderr ไปยังไฟล์ที่ชื่อว่า error" และ "ฉันต้องการให้ไฟล์แสดงข้อผิดพลาดนี้แสดงเป็นข้อผิดพลาดไม่ใช่อย่างอื่น" ส่วนแรกของเรื่องนั้นเป็นไปไม่ได้อย่างแน่นอนนั่นคือประเด็นของฉัน
l0b0

@ l0b0 คุณได้รับมันแล้ว OP แน่นอนสามารถเปลี่ยนเส้นทาง stderr ไปยังไฟล์ที่เรียกว่าข้อผิดพลาด เขาไม่สามารถเลือกสิ่งที่ Java outputs เป็น stderr เพราะเนื้อหาของ stderr ถูกควบคุมโดยแอปพลิเคชันไม่ใช่ผู้ใช้ สิ่งที่เขาสามารถทำได้คือ grep ไฟล์ที่ stderr ถูกส่งผ่านไปยังข้อความผิดพลาดจริง
Jeight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.