새로운 파이프나 파일을 만들지 않고 한 터미널에서 다른 터미널로 출력을 보내는 방법

새로운 파이프나 파일을 만들지 않고 한 터미널에서 다른 터미널로 출력을 보내는 방법

나는 단지 내 터미널(Gnome 터미널)에서 장난을 치고 있을 뿐입니다. 새 파일이나 파이프를 만들지 않고도 한 터미널의 출력을 다른 터미널로 보낼 수 있는 방법이 있는지 궁금합니다.

예: 첫 번째 터미널에서 실행 ls하고 그 출력을 두 번째 터미널에 표시하려고 합니다(두 번째 터미널에서 명령을 사용하거나 사용하지 않고).

답변1

두 터미널이 모두 동일한 사용자에 속하는 경우 특정 터미널의 tty로 사용되는 가상 장치로 출력을 보낼 수 있습니다.

w따라서 TTY 정보가 포함된 의 출력을 사용하고 해당 장치에 직접 쓸 수 있습니다 .

ls > /dev/pts/7

(언급된 장치 w가 pts/7인 경우)

또 다른 옵션은 해당 장치에 연결된 프로세스의 번호를 사용하는 것입니다. 출력을 으로 보냅니다 /proc/<process number>/fd/1.

ls > /proc/5555/fd/1

해당 터미널에서 실행되는 프로세스 번호가 5555라고 가정합니다.

이 직접 쓰기는 다음 경우에만 허용됩니다.쓰기를 시도하는 사용자는 다른 터미널을 소유한 동일한 사용자입니다..

답변2

명령을 사용할 수 있습니다 write.

@MelBurslan이 언급했듯이 쓰기 권한이 꺼져 있으면 먼저 다음을 실행하십시오.

 $ mesg y

에서man mesg

옵션

y 터미널에 대한 쓰기 액세스를 허용합니다.

쓰기 사용법:

$ write username tty

ls예를 들어 출력을 다른 터미널로 보냅니다 .

$ w
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     :0       :0               08:15   ?xdm?   7:37   0.25s init --user
user     pts/0    :0               08:19    1.00s  0.09s  0.01s w
user     pts/12   :0               08:50   54.00s  0.03s  0.03s bash

$ ls | write username pts/12

답변3

비슷한 방법을 찾았습니다.

첫 번째 터미널에서:

 $ tty
 /dev/pts/0
 $ <no need to run any command here, just see the output>

두 번째 터미널에서:

$ ls > /dev/pts/0

이제 첫 번째 터미널에서 출력을 얻습니다.

답변4

터미널의 TTY에 쓸 수 있습니다. 예를 들어:

터미널 1:

$ tty 
ttys000

터미널 2:

$ tty
ttys029

$ exec &> >(tee >(cat >&/dev/ttys000))
ls 

입력하는 동안에도 실시간으로 두 터미널에 출력이 표시됩니다.

리눅스와 macOS에서 작동합니다. macOS TTY 경로는 /dev/{number}Linux에서는 다음과 같습니다./dev/pts/{number}

관련 정보