Іншою можливістю є використання 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
віртуального терміналу - що б там не було, з якого ви запустили 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))
мого xterm
pty. Я можу отримати останню сторінку цього в будь-який час, наприклад:
fmt </dev/vcs$((1+$XDG_VTNR))
Це, мабуть, найкраща практика присвятити якомусь віртуальному терміналу для входу в журнал. /dev/console
як правило, вже зарезервовано для цього, хоча ви можете віддати перевагу не робити того, chown
що, ймовірно, потрібно, щоб мимоволі писати на це. Можливо, у вас є якась функція, яка дозволяє вам робити printk
- що в основному друкується /dev/console
- і тому могла б використовувати його так, як я думаю.
Інший спосіб зробити це було б присвятити PTY для таких цілей. Наприклад, ви можете тримати xterm
вікно відкритим, зберігати висновок tty
при запуску звідти в змінну середовища і використовувати це значення в якості місця призначення для gui
вихідних даних. Таким чином усі журнали будуть перенесені в окреме вікно журналу, через яке ви зможете прокручувати, якщо вам це подобається.
Я колись написав відповідь про те, як подібне можна зробити з bash
історією, якщо ти зацікавився.