한 bash에서 다른 bash 프로세스로 bash 명령을 실행하는 방법은 무엇입니까?

한 bash에서 다른 bash 프로세스로 bash 명령을 실행하는 방법은 무엇입니까?

두 개의 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)을 사용해야 하며 셸을 실행하는 프로세스에서 이를 설정해야 합니다.

관련 정보