Kemungkinan lain adalah menggunakan commanduntuk menurunkan execdari 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 commandtidak 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 Xtty - konsolnya. Ketika Anda menjalankan Xaplikasi dari suatu X .desktopfile, output yang dihasilkannya dialihkan ke Xterminal 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 Xorgv1.16 yang memungkinkannya berjalan di bawah systemdsesi 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/consoleumumnya sudah dicadangkan untuk ini, meskipun Anda mungkin lebih suka untuk tidak melakukan hal chownyang 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, xtermmembuka 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 bashsejarah, jika Anda tertarik.