ฉันรู้สิ่งนี้มาก:
$ 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>สามารถเขียนเป็นอย่างไร>