ฉันรู้สิ่งนี้มาก:
$ command 2>> error
$ command 1>> output
มีวิธีใดบ้างที่ฉันสามารถส่งออก stderr ไปยังไฟล์ข้อผิดพลาดและเอาต์พุต stdout ไปยังไฟล์เอาต์พุตใน bash บรรทัดเดียวกัน?
ฉันรู้สิ่งนี้มาก:
$ command 2>> error
$ command 1>> output
มีวิธีใดบ้างที่ฉันสามารถส่งออก stderr ไปยังไฟล์ข้อผิดพลาดและเอาต์พุต stdout ไปยังไฟล์เอาต์พุตใน bash บรรทัดเดียวกัน?
คำตอบ:
เพียงเพิ่มเข้าไปในบรรทัดเดียว command 2>> error 1>> output
อย่างไรก็ตามโปรดทราบว่า>>
การต่อท้ายหากไฟล์มีข้อมูลอยู่แล้ว ในขณะเดียวกัน>
จะเขียนทับข้อมูลที่มีอยู่ในไฟล์
ดังนั้นcommand 2> error 1> output
หากคุณไม่ต้องการผนวก
เพียงเพื่อประโยชน์ในการเสร็จสิ้นของคุณสามารถเขียน1>
เป็นเพียง>
ตั้งแต่บ่งแฟ้มเริ่มต้นคือการส่งออก ดังนั้น1>
และ>
เป็นสิ่งเดียวกัน
ดังนั้นcommand 2> error 1> output
กลายเป็นcommand 2> error > output
command &2>err.log
ฉันคิดว่าฉันแตกต่างจากซินแทกซี่อย่างสิ้นเชิง (เชื่อมโยงไปยังคำตอบที่เหมาะสมของทุกทุบตีท่อ ISMS อาจจะอยู่ในลำดับ)
command &2>err.log
ไม่ถูกต้องนัก - เครื่องหมายและในไวยากรณ์นั้นใช้สำหรับอธิบายไฟล์เป็นเป้าหมายเช่นcommand 1>&2
เปลี่ยนเส้นทาง stdout เป็น stderr
ลองสิ่งนี้:
your_command 2>stderr.log 1>stdout.log
ตัวเลข0
ผ่าน9
เป็นไฟล์อธิบายในทุบตี
0
ย่อมาจากอินพุตมาตรฐาน1
หมายถึงเอาต์พุตมาตรฐาน2
ย่อมาจากข้อผิดพลาดมาตรฐาน 3
ผ่าน9
มีไว้สำหรับการใช้งานชั่วคราวอื่น ๆ
อธิบายไฟล์ใด ๆ >
ที่สามารถเปลี่ยนเส้นทางไปยังไฟล์หรืออธิบายไฟล์อื่นโดยใช้ผู้ประกอบการ คุณสามารถใช้โอเปอเรเตอร์>>
เพื่อต่อท้ายไฟล์แทนการสร้างไฟล์เปล่า
การใช้งาน:
file_descriptor > filename
file_descriptor > &file_descriptor
โปรดดูที่ขั้นสูงทุบตี Scripting Guide: บทที่ 20. I / O เปลี่ยนเส้นทาง
เช่นนั้น:
$ command >>output 2>>error
หรือถ้าคุณต้องการที่จะผสมเอาต์พุต (stdout & stderr) ในไฟล์เดียวคุณอาจต้องการใช้:
command > merged-output.txt 2>&1
สามารถเปลี่ยนเส้นทางเอาต์พุตคำสั่งหลายคำสั่งได้ สิ่งนี้ใช้ได้กับทั้งบรรทัดคำสั่งหรือมีประโยชน์มากที่สุดในสคริปต์ทุบตี -s
ชี้นำสอบถามรหัสผ่านไปที่หน้าจอ
Hereblock cmds stdout / stderr ถูกส่งไปยังไฟล์ที่แยกออกจากกันและไม่มีอะไรให้แสดง
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Hereblock cmds stdout / stderr จะถูกส่งไปยังไฟล์เดียวและแสดงผล
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Hereblock cmds stdout / stderr ถูกส่งไปยังไฟล์แยกกันและ stdout เพื่อแสดง
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
รหัสผ่านอาจขึ้นอยู่กับว่าคุณเป็นใคร (whoami) และชื่อผู้ใช้
1>
สามารถเขียนเป็นอย่างไร>