Problem
ทำไมเมื่อเราพยายามที่จะ redirect ผลลัพท์ที่ได้จากคำสั่ง java -version ลงไฟล์ โดยใช้คำสั่ง java -version > version.txt แล้วปรากฏว่าไม่มีข้อมูลอะไรอยู่ในไฟล์ version.txt ที่ถูกสร้างขึ้นเลย
Cause
ที่เป็นแบบนี้ก็เพราะว่าเพราะว่าคำสั่ง java -version แสดงผลออกทาง standard error ไม่ใช่ standard out ตัวเครื่องหมาย '>' จะใช้ redirect ได้เฉพาะ output ที่ออกมาทาง standard out เท่านั้น ในกรณีนี้เราต้องใช้ '2>' เพื่อ redirect output ที่ส่งมาทาง standard error แทน
Note: ต้องเข้าใจก่อนว่าโดยปรกติแล้ว input และ output ของระบบจะมีอยู่สามอย่างคือ standard input, standard output และ standard error ตัวแรก standard input ก็คือ ข้อมูลที่ป้อนผ่าน keyboard นั่นเอง standard output คือแสดงผลออกทางหน้าจอ (ในการทำงานปรกติ) ส่วน standard error คือแสดงผลออกทางหน้าจอเช่นเดียวกัน แต่ต่างตรงที่ไว้แสดงข้อความกรณีที่มีข้อผิดพลาดเกิดขึ้น การที่มีการแยกกันระหว่าง standard outupt และ standard error ทำให้เราสามารถเลือกที่จะจัดการกับข้อมูลที่ส่งออกมาได้ อย่างเช่น ถ้าเป็นข้อความแสดงการทำงานปรกติก็เก็บไว้ในไฟล์หนึ่ง แต่ถ้าเป็นข้อผิดพลาดก็เก็บไวอีกไฟล์ เป็นต้น
Solution
ในกรณีนี้เนื่องจาก java -version แสดงผลออกทาง standard error ถ้าเราต้องการ redirect ลงไฟล์ ก็ต้องใช้ '2>' แทน เวลาพิมพ์คำสั่งใน console (อย่าง dos prompt) ดังนี้
java -version 2> version.txt