我有这个过程:
$ bash start.sh
我运行这个命令:
$ pidof bash
并收到此:
9427
我想在脚本 stdin 中运行命令(脚本有自己的命令) 我想运行命令“ give 1 shotgun to player
”
我试过这个:
$ give 1 shotgun to player > /proc/9427/fd/0
但我得到了这个:
-bash: give: command not found
之后,我尝试了这个:
$ echo "give 1 shotgun to player" > /proc/9427/fd/0
give 1 shotgun to player
但是在进程中写入了消息“ ”,但是脚本的命令没有被激活!
答案1
您无法拦截进程中已经存在的 stdin,至少不是按照您尝试的方式。请参阅写入进程的标准输入了解详情。
有两个基本选项可以使用 stdin 从另一个进程控制一个进程,但必须在启动进程时指定它们。
来自文件(脚本)的输入
如果您可以在启动要控制的进程之前准备好整个输入,请创建一个文件并将其用作受控进程的标准输入。示例:
$ cat commands
give 1 shotgun to player
shoot
$ ./start.sh < commands
来自流程的输入
如果您使用另一个程序发出控制进程的命令,请使用管道符号 ( |
) 连接它们。以下示例显示了如何简单地控制什么时候发出命令。
$ cat controller.sh
#!/bin/sh
sleep 5
echo "give 1 shotgun to player"
sleep 2
echo "shoot"
$ ./controller.sh | ./start.sh
这样,您也可以使用echo
您尝试模拟脚本选项而不使用任何脚本文件:
$ echo "give 1 shotgun to player\nshoot" | ./start.sh