Запуск интерактивной команды в качестве фонового процесса в сценарии оболочки - PullRequest
0 голосов
/ 12 февраля 2020

Возникает проблема, когда я пытаюсь запустить интерактивную команду / приложение на фоне сценария оболочки. Я пытаюсь записать вывод команды в файл. Но я не вижу, чтобы эта команда что-то записывала в файл. Даже выполнение команды в bash также не сработало, так как она была приостановлена.

Пример сценария

#!/bin/bash
while true
do
./a.out > test &
PID=$!
sleep 20
kill -9 $PID
done
[@myprog]$ ./a.out &
[1] 3275
Program started

[1]+  Stopped                 ./a.out
[@myprog]$ 

1 Ответ

0 голосов
/ 12 февраля 2020

Вам не нужно создавать фоновый процесс для перенаправления данных. Вы можете сделать следующее, что создаст лог-файл actions.log, содержащий каждое ваше действие.

#! /bin/bash

while read -p "action " act; do
        echo $act
done > actions.log
exit 0

Для вас это будет что-то вроде:

$ a.out > test.log

Если вы это сделаете хотите иметь фоновый процесс, но нужно ввести данные:

$ function inter_child {
    ./inter.sh  <<-EOF
a
b
c
d
EOF
sleep 10
}
$ inter_child &
$ wait
$ cat actions.log 
a
b
c
d

Если это не отвечает на ваш вопрос, пожалуйста, уточните c почему вам нужно создать дочерний процесс и что такое a.out ожидает. Надеюсь, это поможет!

РЕДАКТИРОВАНИЕ:
stdout и stderr - это два разных перенаправления.
Запись stderr в файл 2>: $ ./a.out 2> error.log
Перенаправление stderr в stdout 2>&1: $ ./a.out > log.log 2>&1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...