Как мне создать документ в фоновом режиме из сценария ksh? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть сценарий ksh, который подходит к моменту, когда он должен выполнить длительную команду. Длительная команда выполняется в сценарии через heredoc. Я хочу выбросить команду (обозначенную в моих примерах ниже как cat) в фоновом режиме, но только после того, как она получит ввод от heredoc. Поскольку «nohup cat ..» завершается мгновенно, и я вижу пустой файл nohup.out, я не уверен, что скрипт выполняет то, что мне нужно, то есть порождает версию команды heredoc nohupped и завершается, оставляякоманда для выполнения сколько угодно времени.

Я использую cat в качестве "команды", так как она тоже сидит там и просто ждет консольного ввода.

Рабочая версия без перестановок:

#!/bin/ksh
cat << EOF
Hello
World
HOw are you!
EOF

Попытка nohup heredoc:

#!/bin/ksh
nohup cat <<EOF
Hello
World
HOw are you!
EOF

Кажется, работает, вывод поступает в nohup.out, как и ожидалось. Но теперь, как бросить это на задний план? Я попробовал нижеследующее (и многие его варианты):

#!/bin/ksh
nohup cat & <<EOF
Hello
World
HOw are you!
EOF

, но nohup.out пуст, поэтому я не уверен, что делает вышеперечисленное. На заднем плане нет бегущей «кошки», которая говорит мне, что она, по крайней мере, побежала и закончила - или, может быть, вообще не бегала. Никаких других вариантов, которые я могу придумать, чтобы попытаться выбросить heredoc в фон из моих сценариев ksh, не работает.

Любые предложения о способах достижения этого с использованием heredoc ?

1 Ответ

0 голосов
/ 07 ноября 2019

Вот два варианта.

Вы можете попробовать обернуть последовательность nohup внутри функции, которая может выглядеть чище, а затем вызвать эту функцию с помощью конечного амперсанда.

Используя функцию,как это:

#!/bin/ksh

function dostuff
{
 nohup cat <<- END
        Hello
        World
        How are you!
END
}


dostuff &
wait

Вы также можете попробовать обернуть команды, которые будут помещены в фон, в блок группировки {}, разделяя каждую команду с помощью;внутри скобок, а затем фоновый этот блок с помощью:

{ nohup cat <<- EOF
          ...
          EOF
          ; whatever 
} &
...