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


26

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

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


무엇을 가지고 있습니까? 뭔가 해봤 어? 몇 가지 예를 들어 줄 수 있습니까?
tachomi

첫 번째 터미널에서 @tachomi를 실행 ls하고 두 번째 터미널에 출력을 표시하려고합니다 (두 번째 명령을 사용하거나 사용하지 않음)
Edward Torvalds

답변:


30

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

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

ls > /dev/pts/7

(에 언급 된 기기 w가 pts / 7 인 경우)

다른 옵션은 해당 장치에 연결된 프로세스 수를 사용하는 것입니다. 에 출력을 보내십시오 /proc/<process number>/fd/1.

ls > /proc/5555/fd/1

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

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


나는 명령을 얻지 못 /dev/pts/7하거나 비슷 w하지만 두 번째 방법은 나를 위해 작동합니다
Edward Torvalds

2
@edwardtorvalds /proc/XXX/fd/1일반적으로 기본 장치에 대한 소프트 링크입니다. 사용 ls -l /proc/XXXX/fd/1하고 그것을 가리키는 것을보십시오. w명령에 나타난 것과 관련이 있습니까?
RealSkeptic

나는 w명령과 관련이 없다 나는 명령과 /proc/XXX/fd/0관련 w이있다/dev/pts/7
Edward Torvalds

4
@ edwardtorvalds 나는 명령이 표시 /proc/XXX/fd/1하는 모든 장치에 대한 소프트 링크라고 가정되어 있습니다 w. ls -l그것에 대한 결과는 무엇입니까 ?
RealSkeptic

TTY 정보는 tty(현재 만) 또는 who(모두) 의 출력에서도 찾을 수 있습니다 .
Nick Volynkin

14

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

아치 리눅스에서, 그놈 터미널에서, w명령의 출력은 edward tty2 19:53 6:05 2:48 23.12s firefox내가 쓴다면 ls | write edward tty2출력은 없지만 경고음이
Edward Torvalds

@edwardtorvalds 당신은 edwardd대신에 타이핑 edward했습니까?
tachomi

또한 tty5 (ctrl + alt + 5)에서 시도하면 오류가 발생합니다you have turned write permission off
Edward Torvalds

이 사이트에서 오류를 입력했습니다
Edward Torvalds

mesg y명령을 실행하기 전에 대상 터미널에서 명령을 시도 하십시오
MelBurslan

7

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

첫 번째 터미널에서 :

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

두 번째 터미널에서 :

$ ls > /dev/pts/0

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


1
tail -f대신 cat유용 할 수 있습니다
tachomi

3
@tachomi 실제로 출력을 읽기위한 명령이 필요하지 않습니다
Edward Torvalds

4

tty각 터미널 에서 명령을 사용하여 식별하십시오.

$ tty
/dev/pts/0

$ tty
/dev/pts/1

이 TTY를 가정하면 첫 번째 stdout을 두 번째 stdout으로 리디렉션하려면 첫 번째 터미널에서 다음을 실행하십시오.

exec 1>/dev/pts/1

참고 : 이제 모든 명령 출력 이 pts / 1에 표시됩니다.

pts / 0의 기본 동작 stdout을 복원하려면 다음을 수행하십시오.

exec 1>/dev/pts/0

데모는 이 비디오 를 참조하십시오 .


이 답변도 좋습니다
Edward Torvalds

0

터미널의 TTY에 쓸 수 있습니다. 예를 들면 다음과 같습니다.

터미널 1에서 :

$ tty 
ttys000

터미널 2에서 :

$ tty
ttys029

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

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

Linux 및 macOS에서 작동합니다. macOS TTY 경로는 /dev/{number}Linux에서/dev/pts/{number}


실행 exec &> >(tee >(cat >&/dev/ttys000))이 존재하지 않아 입력 할 수 없습니다.
Edward Torvalds

리눅스에서 @EdwardTorvalds tty같은 것입니다/dev/pts/0
미구엘 Mota

네, 제가 코드를 테스트 할 때 사용한 것입니다
Edward Torvalds

@EdwardTorvalds 어떤 명령이 존재하지 않습니까?
Miguel Mota

당신의 명령 exec &> >(tee >(cat >&/dev/pts/1)). Ctrl 키 조합 (Ctrl + C)이 작동하지 않습니다. 나가기 위해 터미널을 죽여야합니다
Edward Torvalds

-3

당신은 wall또한 사용할 수 있습니다 :

$ wall "Message here"

자세히 설명하고 싶을 수도 있습니다. 나는 이것에서 아무것도 이해하지 못한다
Edward Torvalds

3
보내는 모든 세션을 포함하여 로그인 한 모든 tty 세션에 쓰므 로 사용하고 싶지 않습니다wall ( "모두 쓰기"의 줄임말). 대신을 사용 write하면 특정 tty를 선언 할 수 있습니다.
Monty Harder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.