![한 bash에서 다른 bash 프로세스로 bash 명령을 실행하는 방법은 무엇입니까?](https://linux55.com/image/176777/%ED%95%9C%20bash%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20bash%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A1%9C%20bash%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
두 개의 bash 프로세스가 실행 중입니다. 이름을 bash_1 및 bash_2로 지정하겠습니다. bash_2의 bash_1에서 명령을 실행하고 싶습니다. 나는 이것을 달성하기 위해 이 접근법을 따르고 있습니다.
bash_1에서 IO의 개발 파일을 가져옵니다.
vchandola@mininet-server:~$ echo $$
1097
vchandola@mininet-server:~$ ls -alh /proc/1097/fd
total 0
dr-x------ 2 vchandola vchandola 0 Jul 11 15:48 .
dr-xr-xr-x 9 vchandola vchandola 0 Jul 11 15:48 ..
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 0 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 1 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 2 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 16:08 255 -> /dev/pts/2
bash_2에서 다음 명령을 실행하십시오. bash_2에서 명령을 실행하십시오. bash_1에서 bash 명령을 실행하십시오.
root@mininet-server:/home/vchandola# socat - /dev/pts/2
hello
ls
bash_2에서 이러한 응답을 기대했지만 보지 못했습니다. bash_1에서는 두 문자열이 모두 제공되지만 Enter/개행 문자가 예상대로 읽히거나 제공되지 않는 것 같습니다. 이것이 bash_1에서 본 것입니다.
vchandola@mininet-server:~$ hello
ls
bash_1에서 hello 및 ls 명령이 실행되지 않는 이유는 무엇입니까? bash_1에서 hello와 ls를 실행하는 방법은 무엇입니까?
답변1
shell-1
두 개의 쉘이 있고 다음이 있는 경우 shell-2
:
(shell-1) $ who am i
user pts/0 ...
(shell-2) $ who am i
user pts/1 ...
그 다음에글쓰기연관된 문자 장치에 대한 출력은 연관된 터미널에 인쇄됩니다(보시다시피):
(shell-2) $ echo hello > /dev/pts/0
$
(shell-1) $ hello
장치에 쓰는 것은 shell-2
장치에 쓰는 것과 다르지 않습니다 shell-1
. echo hello
에서 실행하면 shell-1
에도 기록되지만 /dev/pts/0
기록되지는 않습니다.입력하다해당 쉘의 경우 터미널의 "화면"에 기록됩니다.
프로세스가 셸의 표준 입력 스트림에 쓰도록 하려면 다른 메커니즘(예: 파이프 또는 fifo)을 사용해야 하며 셸을 실행하는 프로세스에서 이를 설정해야 합니다.