วิธีเปลี่ยนเส้นทางเอาต์พุตของโปรแกรมที่กำลังรันไปยัง / dev / null


19

ฉันรู้ว่าเพื่อที่จะระงับการส่งออกของโปรแกรมฉันสามารถเปลี่ยนเส้นทางไปยัง/dev/nullตัวอย่างเช่นเพื่อซ่อนข้อผิดพลาดและข้อความเตือนจากโครเมียมฉันสามารถเริ่มโปรแกรมเช่นนี้

chromium-browser 2> /dev/null &

อย่างไรก็ตามหากฉันลืมเกี่ยวกับข้อความแสดงข้อผิดพลาดและประเภท

chromium-browser &

(ซึ่งค่อนข้างน่ารำคาญเมื่อปรากฏกลางคำสั่ง) ฉันไม่รู้ว่าต้องทำอะไรยกเว้นการหยุดแอปพลิเคชันและเริ่มต้นอย่างถูกต้องอีกครั้ง

ฉันสามารถเปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดโดยไม่รีสตาร์ทแอปพลิเคชันได้หรือไม่

คำตอบ:


8

นอกจากนี้คุณยังสามารถเปิดเบราว์เซอร์ด้วย nohup จากนั้นปิดหน้าต่างเทอร์มินัลดังต่อไปนี้:

nohup chromium-browser &

ด้วยวิธีนี้เบราว์เซอร์จะเปิดและแยกออกจากคอนโซลซึ่งสามารถปิดได้อย่างเงียบ ๆ


2
นั่นเป็นที่ยอมรับยกเว้นความจริงที่ว่าฉันจะต้องจำให้พิมพ์nohup
phunehehe

5
@phu บน zsh อย่างน้อยคุณสามารถใส่setopt nohupในของคุณ.zshrcและมันจะไม่มีอะไรทุกอย่างที่คุณทำงาน; ฉันไม่แน่ใจเกี่ยวกับเปลือกหอยอื่น ๆ
Michael Mrozek

ใช่เยี่ยมมากฉันชอบแบบนี้!
phunehehe

3
หรือคุณสามารถสร้างนามแฝง ... alias chromium = nohup chromium
Pablo Olmos de Aguilera C.

22

นี้ได้รับการตอบที่นี่: ที่นี่โดยvladr คำตอบคือ (อ้าง):

  • แนบกับกระบวนการที่เป็นปัญหาโดยใช้ gdb และเรียกใช้:
  • p dup2 (open ("/ dev / null", 0), 1) (สำหรับการเปลี่ยนเส้นทาง stdout)
  • p dup2 (open ("/ dev / null", 0), 2) (สำหรับการเปลี่ยนเส้นทาง stderr)
  • detach
  • เลิก

ฉันลองในสคริปต์ต่อไปนี้:

[รุ่นหลังจากความคิดเห็นแรก:]

sleep 10 # ดังนั้นฉันสามารถมีเวลาแนบกับกระบวนการ
ถ้า ["$ sonorfather" == "father"] # หลีกเลี่ยงการเรียกซ้ำแบบไม่สิ้นสุด 
แล้วก็ 
   sonorfather = son ./test & 
Fi 

ในขณะที่จริง 
ทำ 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   นอน 1 
เสร็จแล้ว 

ฉันปิดใช้งานเอาต์พุต stderr ก่อนที่จะสร้างกระบวนการลูกนี่คือผลลัพธ์:

พ่อ stdout 
ลูกชาย 
พ่อ stdout 
ลูกชาย 
[และต่อไป ... ] 

ฉันหวังว่านี่จะตอบคำถามของคุณ: stderr กระบวนการบุตรถูกเปลี่ยนเส้นทางด้วย


3
นั่นเป็นสิ่งที่ดีมาก แต่จากนั้นฉันอาจมีปัญหากับโครเมียมเนื่องจากมันจะสร้างกระบวนการใหม่สำหรับแท็บเบราว์เซอร์แต่ละแท็บ
phunehehe

แก้ไขโพสต์ของฉันเพื่อตอบคุณ
Mike Perdide

ดูเหมือนว่าฉันจะต้องเปลี่ยนเส้นทางการส่งออกก่อนที่กระบวนการลูกจะถูกสร้างขึ้น? ขอบคุณสำหรับความรู้ แต่เกี่ยวกับความซับซ้อนฉันต้องการเพียงแค่ไปกับnohup:)
phunehehe

ในทางเทคนิคการรั่วไหลนี้อธิบายไฟล์ซ้ำกัน/dev/nullแต่ในทางปฏิบัติที่ไม่ส่งผลกระทบอย่างมีนัยสำคัญอะไร
เควิน

6

คุณสามารถตั้งค่านามแฝงสำหรับchromium-browserให้เรียกใช้แทนchromium-browser 2> /dev/null

เช่นหากคุณใช้ bash ให้แก้ไข /home/username/.bashrc และเพิ่มบรรทัด:

chromium-browser='chromium-browser 2> /dev/null'

หรือดีกว่าเลย

chrome='chromium-browser 2> /dev/null'

และบันทึกการกดแป้นบางอย่าง

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