ความเป็นไปได้อีกอย่างหนึ่งก็คือใช้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
ฉันไม่สามารถดูเหมือนจะเป็นเพียงแค่การเขียนไปยัง นี้อาจ(ตามที่ผมคิดว่ามีโอกาสมากขึ้น)มีสิ่งที่จะทำอย่างไรกับการเปลี่ยนแปลงมากที่ผ่านมาและดำเนินการด้วยความรุนแรงXorg
v1.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
ประวัติศาสตร์ถ้าคุณสนใจ