ความเป็นไปได้อีกอย่างหนึ่งก็คือใช้commandลดระดับexecจากบิวด์อินพิเศษไปเป็นบิวด์อินธรรมดาอย่าง:
alias shh='command exec >/dev/null 2>&1'
ดังนั้นตอนนี้คุณสามารถทำได้:
(shh; call some process &)
ฉันเพิ่งสังเกตเห็นcommandว่าไม่ได้ทำงานในzsh (ดูเหมือนว่าจะทำในเปลือกหอยส่วนใหญ่อื่น ๆ )แต่ที่มันไม่ทำงานคุณสามารถทำได้แทน:
alias shh='eval "exec >/dev/null 2>&1"'
... ซึ่งควรทำงานได้ทุกที่
ในความเป็นจริงคุณอาจทำ:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
ดังนั้นคุณสามารถทำได้:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
เอาท์พุท
can anyone hear
การติดตามการอภิปรายแสดงความคิดเห็นกับ @ vinc17 เป็นเรื่องที่น่าสังเกตว่าเอาต์พุตคอนโซลของแอพ GUI เกือบทั้งหมดนั้นมีไว้สำหรับXคอนโซล tty เมื่อคุณเรียกใช้XแอปจากX .desktopไฟล์เอาต์พุตที่สร้างขึ้นจะถูกส่งไปยังXเทอร์มินัลเสมือนของ - ซึ่งเป็นสิ่งที่ tty ที่คุณเปิดใช้Xในตอนแรก ฉันสามารถอยู่จำนวน TTY $XDG_VTNRนี้กับ
น่าแปลกที่แม้ว่า - และอาจจะเพราะผมเพิ่งเริ่มใช้startx- /dev/tty$XDG_VTNRฉันไม่สามารถดูเหมือนจะเป็นเพียงแค่การเขียนไปยัง นี้อาจ(ตามที่ผมคิดว่ามีโอกาสมากขึ้น)มีสิ่งที่จะทำอย่างไรกับการเปลี่ยนแปลงมากที่ผ่านมาและดำเนินการด้วยความรุนแรงXorgv1.16 ที่ช่วยให้สามารถทำงานภายใต้systemdเซสชันของผู้ใช้แทนที่จะต้องรากสิทธิพิเศษ
ถึงกระนั้นฉันสามารถทำ:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
ตอนนี้some x appเอาท์พุทของคอนโซลทั้งหมดถูกส่งไปที่/dev/tty$((1+$XDG_VTNR))แทนที่จะxtermเป็น pty ของฉัน ฉันสามารถรับหน้าสุดท้ายของหน้านี้เมื่อใดก็ได้เช่น:
fmt </dev/vcs$((1+$XDG_VTNR))
อาจเป็นวิธีที่ดีที่สุดในการอุทิศเทอร์มินัลเสมือนบางส่วนเพื่อบันทึกเอาต์พุตต่อไป /dev/consoleโดยทั่วไปแล้วสงวนไว้สำหรับสิ่งนี้แม้ว่าคุณอาจไม่ต้องการทำสิ่งchownที่เป็นไปได้สำหรับคุณที่จะเขียนถึงสิ่งนี้ คุณอาจมีฟังก์ชั่นบางอย่างที่ช่วยให้คุณทำprintk- ซึ่งโดยทั่วไปแล้วพิมพ์ไป/dev/console- และสามารถใช้ในแบบที่ฉันคิด
อีกวิธีหนึ่งในการทำเช่นนี้ก็คือการอุทิศptyตามวัตถุประสงค์ดังกล่าว ตัวอย่างเช่นคุณสามารถxtermเปิดหน้าต่างค้างไว้บันทึกผลลัพธ์ของttyเมื่อเรียกใช้จากที่นั่นในตัวแปรสภาพแวดล้อมและใช้ค่านั้นเป็นปลายทางสำหรับguiผลลัพธ์ของ ด้วยวิธีดังกล่าวบันทึกทั้งหมดจะถูกส่งไปยังหน้าต่างบันทึกแยกต่างหากซึ่งคุณสามารถเลื่อนดูได้หากคุณต้องการ
ฉันเคยเขียนคำตอบเกี่ยวกับวิธีการทำสิ่งที่คล้ายกันกับbashประวัติศาสตร์ถ้าคุณสนใจ