วิธีเปลี่ยนเส้นทาง stderr เป็น stdout ใน Bash

How Redirect Stderr Stdout Bash



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







ทุกกระบวนการใน Linux จะสร้างสตรีมข้อมูลสามแบบ stdin, stdout และ stderr:



  • stdin : รับข้อมูลจากผู้ใช้ผ่านแป้นพิมพ์
  • stdout : แสดงเอาต์พุตบนหน้าจอ
  • stderr : แสดงข้อมูลข้อผิดพลาดบนหน้าจอ

ทุกสตรีมข้อมูลมีรหัสตัวเลข:



รหัสตัวเลข ชื่อ
0 stdin
1 stdout
2 stderr

มาอธิบายการเปลี่ยนเส้นทางอีกเล็กน้อยพร้อมรายละเอียด:





วิธีเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานใน Bash:

ในการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานของคำสั่ง เราจะใช้ 1 กับตัวดำเนินการเปลี่ยนเส้นทางที่มากกว่าเครื่องหมาย >:

$ลส 1>stdout.txt

คำสั่งดังกล่าวจะสร้างไฟล์และวางเอาต์พุตมาตรฐานของคำสั่ง ls ในไฟล์ stdout.txt



หากต้องการอ่านไฟล์ stdout.txt ให้ใช้:

$แมวstdout.txt

เราสามารถเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์ได้เช่นกันโดยใช้คำสั่ง:

$แมวmyfile.txt2>stderr.txt

ในการดูไฟล์ stderr.txt ให้ใช้:

$แมวstderr.txt

ตรวจสอบให้แน่ใจว่าใช้ 2 จะมากกว่าเครื่องหมาย > เนื่องจากไม่มีไฟล์ myfile.txt ในไดเร็กทอรี คำสั่ง cat จะให้ข้อผิดพลาดที่จะต่อท้ายในไฟล์ stderr.txt

เอาต์พุตมาตรฐานเหล่านี้สามารถเปลี่ยนเส้นทางได้ด้วยคำสั่งเดียวเช่นกัน ใช้:

$ลส 1>stdout.txt2>stderr.txt

ผลลัพธ์ของคำสั่ง ls จะถูกเขียนในไฟล์ stdout.txt ไฟล์ แต่ stderr.txt จะยังคงว่างเปล่าเพราะจะไม่มีข้อผิดพลาด

ตอนนี้มาทำ stderr.txt:

$แมวmyfile.txt1>stdout.txt2>stderr.txt

ใช้คำสั่งด้านล่างเพื่ออ่าน stderr.txt

$แมวstderr.txt

และแน่นอน stdout.txt จะว่างเปล่า

บทสรุป :

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