วิธีเปลี่ยนทิศทางเอาต์พุตของแอปพลิเคชันในพื้นหลังเป็น / dev / null


100

ฉันต้องการเปลี่ยนเส้นทางเอาต์พุตที่สร้างจากแอปพลิเคชันพื้นหลังใน Linux เป็น / dev / null

ฉันใช้โปรแกรมแก้ไขข้อความ kate และพิมพ์ข้อความดีบักทั้งหมดบนเทอร์มินัลซึ่งฉันต้องการเปลี่ยนเส้นทางไปที่ / dev / null

มีความคิดอย่างไรที่จะทำ?

ขอบคุณ


คำตอบ:


232

คุณใช้:

yourcommand  > /dev/null 2>&1

หากควรทำงานในพื้นหลังให้เพิ่มไฟล์ &

yourcommand > /dev/null 2>&1 &

>/dev/null 2>&1หมายถึงการเปลี่ยนเส้นทางstdoutไปยัง/dev/nullAND stderrไปยังสถานที่ที่เป็นstdoutจุดในขณะนั้น

หากคุณต้องการstderrที่จะเกิดขึ้นบนคอนโซลและมีเพียงstdoutไป/dev/nullคุณสามารถใช้:

yourcommand 2>&1 > /dev/null

ในกรณีนี้stderrจะถูกเปลี่ยนเส้นทางไปยังstdout(เช่นคอนโซลของคุณ) และหลังจากนั้นต้นฉบับstdoutจะถูกเปลี่ยนเส้นทางไปที่/dev/null

หากโปรแกรมไม่ควรยุติคุณสามารถใช้:

nohup yourcommand &

ไม่มีพารามิเตอร์ใด ๆ เอาต์พุตทั้งหมดจะลงจอดใน nohup.out


ทั้งสองทำงาน แต่มีความแตกต่างเล็กน้อย แต่อย่าจำ
evildead

อาตกลงรับและเพิ่มเวอร์ชันอื่น
evildead

หากนี่เป็นคำสั่งสุดท้ายในไฟล์ bash สิ่งหนึ่งที่ฉันสังเกตเห็นคือมันออกจากคอนโซลคำสั่งที่เรียกไฟล์โดยไม่มีพรอมต์
Dennis

เอาท์พุท @elig เปลี่ยนเส้นทางของแอพลิเคชันทำงานอยู่แล้วเป็นไปไม่ได้ IMO หรืออย่างน้อยก็ไม่ได้ง่ายเพราะการเปลี่ยนเส้นทางผ่านdup2()ที่เกิดขึ้นทันทีหลังจากที่แต่ก่อนfork() exec*()เมื่อexec*()ดำเนินการโปรแกรมแล้วเชลล์ไม่มีความสามารถในการเปลี่ยนทิศทางผลลัพธ์ของกระบวนการนั้น แก้ไขฉันถ้าฉันผิด แต่ฉันไม่รู้เกี่ยวกับเชลล์ที่ใช้ฟังก์ชันดังกล่าว
evildead

3

สิ่งเหล่านี้จะเปลี่ยนเส้นทางทั้งสอง:

yourcommand  &> /dev/null

yourcommand  >& /dev/null

แม้ว่าคู่มือการทุบตีบอกว่าควรใช้แบบแรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.