Một khả năng khác là sử dụng command
để hạ cấp exec
từ một nội dung đặc biệt sang một nội dung cũ đơn giản như:
alias shh='command exec >/dev/null 2>&1'
Vì vậy, bây giờ bạn có thể làm:
(shh; call some process &)
Tôi chỉ nhận thấy rằng command
nó không hoạt động zsh
(vì nó dường như làm trong hầu hết các shell khác) , nhưng thay vào đó, nó không hoạt động mà bạn có thể làm:
alias shh='eval "exec >/dev/null 2>&1"'
... Mà nên làm việc ở mọi nơi.
Trong thực tế, bạn thậm chí có thể làm:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
Vì vậy, bạn có thể làm:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
ĐẦU RA
can anyone hear
Theo dõi một cuộc thảo luận với @ vinc17, điều đáng chú ý là hầu như tất cả đầu ra giao diện điều khiển của ứng dụng GUI thường dành cho X
tty - bảng điều khiển của nó. Khi bạn chạy một X
ứng dụng từ một X
.desktop
tệp, đầu ra mà nó tạo ra được định tuyến đến X
thiết bị đầu cuối ảo - đó là bất cứ thứ gì mà nó được khởi chạy X
ở nơi đầu tiên. Tôi có thể giải quyết số tty này với $XDG_VTNR
.
Kỳ lạ thay - và có lẽ bởi vì tôi mới bắt đầu sử dụng startx
- tôi dường như không còn có thể viết thư /dev/tty$XDG_VTNR
. Điều này cũng có thể (như tôi nghĩ là có khả năng hơn) có liên quan đến sự thay đổi rất gần đây và quyết liệt được thực hiện với Xorg
v1.16 cho phép nó chạy dưới systemd
phiên người dùng thay vì yêu cầu quyền root .
Tuy nhiên, tôi có thể làm:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Bây giờ tất cả some x app
đầu ra giao diện điều khiển đang được định tuyến /dev/tty$((1+$XDG_VTNR))
thay vì xterm
pty của tôi . Tôi có thể lấy trang cuối cùng này bất cứ lúc nào như:
fmt </dev/vcs$((1+$XDG_VTNR))
Có lẽ cách tốt nhất là dành một số thiết bị đầu cuối ảo để ghi nhật ký đầu ra. /dev/console
thường được dành riêng cho việc này, mặc dù bạn có thể không muốn làm điều chown
đó có thể được yêu cầu để bạn hoàn toàn viết thư cho điều đó. Bạn có thể có một số chức năng cho phép bạn thực hiện printk
- về cơ bản là in /dev/console
- và vì vậy tôi có thể sử dụng nó theo cách tôi cho là.
Một cách khác để làm điều này sẽ là dành một pty cho các mục đích như vậy. Ví dụ, bạn có thể giữ một xterm
cửa sổ mở, lưu đầu ra tty
khi chạy từ đó trong một biến môi trường và sử dụng giá trị đó làm đích cho gui
đầu ra của. Theo cách đó, tất cả các bản ghi sẽ được chuyển đến một cửa sổ nhật ký riêng, sau đó bạn có thể cuộn qua nếu bạn thích.
Tôi đã từng viết một câu trả lời về cách một điều tương tự có thể được thực hiện với bash
lịch sử, nếu bạn quan tâm.