我有两个 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 hello
on shell-1
,也会写入/dev/pts/0
,但不会变成输入对于该 shell,它被写入终端的“屏幕”。
如果您希望进程写入 shell 的标准输入流,则需要使用不同的机制(例如管道或 fifo),并且需要由执行 shell 的进程进行设置。