Іншою можливістю є використання 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, як правило, призначений для Xtty - його консолі. Коли ви запускаєте Xдодаток з X .desktopфайлу, вихід, який він генерує, перенаправляється до Xвіртуального терміналу - що б там не було, з якого ви запустили Xв першу чергу. Я можу звернутися до цього номеру у Tty $XDG_VTNR.
Дивно, але, можливо, тому, що я тільки почав використовувати, startxя більше не можу, як просто писати /dev/tty$XDG_VTNR. Це також може (як я вважаю, що це більш імовірно) має щось Xorgспільне з самими останніми і різкими змінами, впровадженими з v1.16, що дозволяє йому запускатись під час systemdсеансу користувача, а не вимагати привілеїв root .
І все-таки я можу:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Тепер весь some x appвихід з консолі спрямовується до /dev/tty$((1+$XDG_VTNR))мого xtermpty. Я можу отримати останню сторінку цього в будь-який час, наприклад:
fmt </dev/vcs$((1+$XDG_VTNR))
Це, мабуть, найкраща практика присвятити якомусь віртуальному терміналу для входу в журнал. /dev/consoleяк правило, вже зарезервовано для цього, хоча ви можете віддати перевагу не робити того, chownщо, ймовірно, потрібно, щоб мимоволі писати на це. Можливо, у вас є якась функція, яка дозволяє вам робити printk- що в основному друкується /dev/console- і тому могла б використовувати його так, як я думаю.
Інший спосіб зробити це було б присвятити PTY для таких цілей. Наприклад, ви можете тримати xtermвікно відкритим, зберігати висновок ttyпри запуску звідти в змінну середовища і використовувати це значення в якості місця призначення для guiвихідних даних. Таким чином усі журнали будуть перенесені в окреме вікно журналу, через яке ви зможете прокручувати, якщо вам це подобається.
Я колись написав відповідь про те, як подібне можна зробити з bashісторією, якщо ти зацікавився.