답변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'
- 다음과 같은 명령을 사용하여 어디에서나(터미널 2 포함) 첫 번째 터미널에 텍스트를 보낼 수 있습니다. 결과는 첫 번째 터미널에 입력하고 를 누르는
참고 사항:
- 스크린 세션의 이름을 지정했거나
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
그러면 테스트가 쉘 프로세스의 표준 출력으로 인쇄됩니다.