Выполните внутренние команды в сценарии stdin!

У меня есть этот процесс:

$ 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"был записан в процессе, но команда сценария не была активирована!

0
задан 28 January 2019 в 04:31

2 ответа

Вы не можете прервать уже существующий 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
2
ответ дан 26 October 2019 в 11:01

Вопросы и ответы Melebius, связанный с на самом деле, предоставляет решение, которые позволяют нам, Вы пишете в stdin из другого процесса:

Используя mkfifo можно создать именованный канал. Можно затем перенаправить stdin из Вашего процесса к именованному каналу и записи к нему от другого процесса:

$ mkfifo myfifo.pipe
$ ./start.sh < myfifo.pipe

... и от другого терминала:

$ echo "give 1 shotgun to player" > myfifo.pipe
2
ответ дан 26 October 2019 в 11:01

Другие вопросы по тегам:

Похожие вопросы: