Kemungkinan lain adalah menggunakan command
untuk menurunkan exec
dari builtin khusus ke builtin lama polos seperti:
alias shh='command exec >/dev/null 2>&1'
Jadi sekarang Anda bisa melakukannya:
(shh; call some process &)
Saya baru saja memperhatikan bahwa command
tidak berfungsizsh
(seperti yang terlihat di kebanyakan shell lain) , tetapi jika tidak berhasil, Anda dapat melakukannya:
alias shh='eval "exec >/dev/null 2>&1"'
... yang seharusnya bekerja di mana-mana.
Bahkan, Anda mungkin melakukannya:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
Jadi Anda bisa melakukan:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
KELUARAN
can anyone hear
Menindaklanjuti diskusi komentar dengan @ vinc17, perlu dicatat bahwa hampir semua output konsol aplikasi GUI umumnya ditujukan untuk X
tty - konsolnya. Ketika Anda menjalankan X
aplikasi dari suatu X
.desktop
file, output yang dihasilkannya dialihkan ke X
terminal virtual - yang merupakan tty dari mana Anda meluncurkannya.X
. Saya dapat membahas nomor tty ini dengan $XDG_VTNR
.
Anehnya - dan mungkin karena saya baru saja mulai menggunakan startx
- saya tidak lagi bisa menulis /dev/tty$XDG_VTNR
. Ini mungkin juga (karena saya pikir lebih mungkin) ada hubungannya dengan perubahan yang sangat baru dan drastis diimplementasikan dengan Xorg
v1.16 yang memungkinkannya berjalan di bawah systemd
sesi pengguna daripada membutuhkan hak akses root .
Meski begitu, saya bisa melakukan:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Sekarang semua some x app
's konsol keluaran sedang diarahkan ke /dev/tty$((1+$XDG_VTNR))
daripada saya xterm
' s pty. Saya bisa mendapatkan halaman terakhir ini kapan saja seperti:
fmt </dev/vcs$((1+$XDG_VTNR))
Ini mungkin praktik terbaik untuk mendedikasikan beberapa terminal virtual untuk mencatat keluaran. /dev/console
umumnya sudah dicadangkan untuk ini, meskipun Anda mungkin lebih suka untuk tidak melakukan hal chown
yang mungkin diperlukan bagi Anda untuk menulis itu. Anda mungkin memiliki beberapa fungsi yang memungkinkan Anda melakukan aprintk
- yang pada dasarnya mencetak/dev/console
- dan bisa menggunakannya dengan cara yang saya kira.
Cara lain untuk melakukan hal ini akan mendedikasikan pty untuk tujuan tersebut. Anda dapat, misalnya, xterm
membuka jendela, menyimpan outputtty
ketika dijalankan dari sana dalam variabel lingkungan, dan menggunakan nilai itu sebagai tujuan untukgui
output. Dengan cara itu semua log akan dialihkan ke jendela log yang terpisah, yang kemudian bisa Anda gulir jika Anda suka.
Saya pernah menulis jawaban tentang bagaimana hal serupa dapat dilakukan dengan bash
sejarah, jika Anda tertarik.