다른 의사 터미널의 쉘로 데이터를 보낼 수 있습니까?

다른 의사 터미널의 쉘로 데이터를 보낼 수 있습니까?

다음 그림은 의사 터미널의 작동 방식을 보여줍니다.

여기에 이미지 설명을 입력하세요.

"Hello"두 개의 터미널 에뮬레이터가 열려 있는 경우 첫 번째 터미널 에뮬레이터에서 두 번째 터미널 에뮬레이터로 문자열을 보낼 수 있습니다 .

echo "Hello" > /dev/pts/1

이 명령이 실행되면 문자열이 "Hello"두 번째 의사 터미널의 슬레이브 측에서 두 번째 의사 터미널의 호스트 측으로 전송된 다음 두 번째 터미널 에뮬레이터에 표시됩니다.

이제 반대 방향, 즉 터미널 에뮬레이터(또는 셸이 실행 중인 프로세스) 대신 셸로 데이터를 보낼 수 있습니까?

답변1

당신이 찾고 있는 것이 정확히 아닐 수도 있지만, 저는 보통 터미널에서 스크린 세션을 실행하여 이와 같은 문제를 해결합니다.

나는 이렇게 한다:

  • 터미널 1에서는 다음과 같은 새로운 스크린 세션을 시작합니다.1학기종종 screen -S term1
    이 기능이 필요할 때 터미널 1이 아직 존재하지 않습니다. 이 경우 새 터미널에서 세션을 만듭니다.xterm -e screen -S term1 & ; disown
    당신은 궁금할 것입니다 & ; disown. 이것은 xterm이 시작된 후 쉘로 돌아가고 싶고, xterm내가 시작한 쉘이 죽으면 죽고 싶지 않기 때문입니다.
  • 두 번째 터미널에서 다음과 같은 작업을 수행합니다. ( screen -S term2또는 다음을 실행하여 새 터미널을 만듭니다 xterm -e screen -S term2 & ; disown.)
  • 현재 커뮤니케이션 업무는 다음과 같습니다.
    • 다음과 같은 명령을 사용하여 어디에서나(터미널 2 포함) 첫 번째 터미널에 텍스트를 보낼 수 있습니다. 결과는 첫 번째 터미널에 입력하고 를 누르는
      screen -S term1 -X stuff 'echo "foo"\n'
      것과 같습니다.echo "foo"Enter
    • 더 간단한 예: 입력을 보내지 some words아니요Enter이를 이용해 터미널 2로 이동하세요 .screen -S term2 -X stuff 'some words'

참고 사항:

  • 스크린 세션의 이름을 지정했거나 term1다른 term2이름을 사용한 경우
  • 이미 존재하는 터미널에서 실행 중인 경우 screen -S somename, 실행 후 screen 세션만 종료되므로 주의하시기 바랍니다 exit.
    전체 터미널을 중지하려면 screen -S somename ; exit대신 사용하세요.
    새로 생성된 터미널에서는 이 작업이 필요하지 않습니다.

답변2

TIOCSTI는 의견에 설명된 대로 작동합니다.트리거이상:https://stackoverflow.com/a/29615101/2995591

답변3

각 프로세스에는 3개의 기본 "파일 설명자"가 있습니다.

0 is stdin  (standart input)
1 is stdout (standart output)
2 is stderr (standart error output)

쉘 프로세스의 PID를 찾아야 하며 다음을 수행할 수 있습니다.

echo "test" > /proc/{your_shell_pid}/fd/1

그러면 테스트가 쉘 프로세스의 표준 출력으로 인쇄됩니다.

관련 정보