У меня есть этот процесс:
$ 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
"был записан в процессе, но команда сценария не была активирована!
Вы не можете прервать уже существующий stdin процесса, по крайней мере, не способ, которым Вы пробуете. Посмотрите Запись в stdin процесса для деталей.
Существует две основных опции управлять процессом от другого использования 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
Вопросы и ответы Melebius, связанный с на самом деле, предоставляет решение, которые позволяют нам, Вы пишете в stdin
из другого процесса:
Используя mkfifo
можно создать именованный канал. Можно затем перенаправить stdin
из Вашего процесса к именованному каналу и записи к нему от другого процесса:
$ mkfifo myfifo.pipe
$ ./start.sh < myfifo.pipe
... и от другого терминала:
$ echo "give 1 shotgun to player" > myfifo.pipe