3. การเปลี่ยนทิศข้อมูล (Redirection)
ใช้สัญญลักษณ์ >
ใสการเปลี่ยนทิศ
3.1 ข้อมูลมาตรฐาน
ข้อมูลมาตรฐานในเชลล์จะมีอยู่ 4 ชนิด คือข้อมูลเข้า(stdin), ข้อมูลแสดงผล(stdout), ข้อมูลข้อผิดพลาด(stderr), และแฟ้มข้อมูล(file)
ในทางปฏิบัติ เราสามารถเปลี่ยนทิศทางของข้อมูลเหล่านี้ไปมาได้ โดยมีมาตรฐานคือ 1 จะหมายถึงข้อมูลแสดงผล(stdout) และ 2 จะหมายถึงข้อมูลความผิดพลาด(stderr)
เช่น
3.2 ตัวอย่างเปลี่ยน stdout ไปเป็น file
$ ls -l > ls-l.txt
จะเปลี่ยนการแสดงผลของคำสั่ง ls -l
ไปเก็บไว้ที่ไฟล์ชื่อ ls-l.txt ดังนั้นคำสั่งตามตัวอย่างนี้จะไม่แสดงอะไรออกมาทางจอภาพ แต่จะเก็บไว้ที่ไฟล์แทน หากเราต้องการดูผล สามารถใช้คำสั่งแสดงผลของไฟล์ได้คือ
$ cat ls-l.txt
3.3 ตัวอย่างเปลี่ยน stderr ไปเป็น file
$ grep da * 2> grep-errors.txt
ตัวอย่างนี้เป็นการค้นหาข้อความ da
ในทุกไฟล์ (*) และหากเกิดข้อผิดพลาดขึ้น จะนำข้อความผิดพลาดไปเก็บไว้ที่ไฟล์ชื่อ grep-errors.txt
3.4 ตัวอย่างเปลี่ยน stdout ไปเป็น stderr
$ grep da * 1>&2
เป็นการค้นหาข้อความ da
ในทุกไฟล์ (*) โดยนำการแสดงผลไปใส่ไว้ใน stderr แทนการแสดงผลปกติ แต่ในกรณีนี้เราป้อนคำสั่งทางแป้นพิมพ์ stdout และ stderr คือจอภาพเหมือนกัน จึงไม่เห็นความแตกต่าง แต่หากคำสั่งนี้ไปอยู่ในสคริปต์ที่เรากำหนดให้ stderr เป็นไฟล์ error-log การแสดงผลก็จะถูกเปลี่ยนทิศไปตามนั้น
3.5 ตัวอย่างเปลี่ยน stderr ไปเป็น stdout
$ grep da * 2>&1
เป็นการค้นหาข้อความ da
ในทุกไฟล์ (*) โดยหากเกิดข้อผิดพลาดขึ้น จะแสดงผลข้อผิดพลาดออกมาทาง stdout ซึ่งในที่นี้คือจอภาพเหมือนกัน
3.6 ตัวอย่างเปลี่ยน stderr และ stdout ไปยัง file
$ rm -f $(find /home/USER -name core) &> /dev/null
คำสั่งนี้เป็นการค้นหาไฟล์ในไดเรคทอรี่ /home/USER
ที่มีชื่อว่า core (find /home/USER -name core
)
เมื่อพบแล้วก็จัดการลบทิ้งโดยไม่เตือน (rm -f
)
โดยโยกการแสดงผลทั้งหมด (ทั้ง stderr และ stdout - ใช้สัญญลักษณ์ &>
) ไปยังไฟล์ชื่อ /dev/null
ซึ่งเป็นไฟล์พิเศษ หมายความว่ายกเลิกการแสดงผลทั้งหมด
(คำสั่งนี้ค่อนข้างอันตราย เพราะลบโดยไม่เตือน โปรดทดลองด้วยความระมัดระวังครับ)
- Printer-friendly version
- Log in or register to post comments
- 3859 reads
Recent comments