또 다른 가능성은 특수 내장에서 일반 내장으로 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 응용 프로그램의 콘솔 출력이 일반적으로 tty-콘솔을위한 것임을 주목할 가치가 X
있습니다. 파일에서 X
앱 을 실행하면 X
.desktop
생성 된 출력이 X
의 가상 터미널로 라우팅됩니다 X
. 이것은 처음부터 시작한 것이 무엇이든 tty 입니다. 이 tty 번호를로 해결할 수 있습니다 $XDG_VTNR
.
이상하게도-아마 사용하기 시작했기 때문에 startx
더 이상 쓸 수없는 것 같습니다 /dev/tty$XDG_VTNR
. 이것은 또한 할 수있다 (좀 더 가능성이 생각하는) 으로 구현 된 매우 최근의 급격한 변화와 함께 할 수있는 뭔가가 Xorg
그것에서 실행 할 수 있습니다 v1.16 systemd
오히려 필요없이 사용자 세션 루트 권한을.
여전히, 나는 할 수 있습니다 :
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
.