如何从一个 bash 到另一个 bash 进程执行 bash 命令?

如何从一个 bash 到另一个 bash 进程执行 bash 命令?

我有两个 bash 进程正在运行。我们将它们命名为 bash_1 和 bash_2。我希望从 bash_2 执行 bash_1 中的命令。我正在遵循这种方法来实现这一目标。

获取bash_1中IO的dev文件

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,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 helloon shell-1,也会写入/dev/pts/0,但不会变成输入对于该 shell,它被写入终端的“屏幕”。

如果您希望进程写入 shell 的标准输入流,则需要使用不同的机制(例如管道或 fifo),并且需要由执行 shell 的进程进行设置。

相关内容