Выполнить команду Nohup с вводом


11

В UNIX у меня есть процесс, который я хочу запустить с помощью nohup. Тем не менее, этот процесс в какой-то момент будет ждать, когда мне нужно будет войти yesили noпродолжить. До сих пор в UNIX я делал следующее:

nohup myprocess <<EOF
y
EOF

Поэтому я запускаю процесс «myprocess», используя nohup и pipe в файле с «y», затем закрываю файл. Вышеприведенные строки представляют собой три отдельные команды - т.е. я нажимаю ввод в первой строке в UNIX, затем получаю подсказку, в которой вводю y, а затем нажимаю ввод, чтобы, наконец, набрать 'EOF' и снова нажать return. Так что это работает отлично, но моя проблема ниже.

Теперь я хочу выполнить это в Perl, но я не уверен, как я могу выполнить эту команду, так как она состоит из трех строк. Я не знаю, будет ли работать следующее:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`

это должно работать так, как написано в вопросе (после первого редактирования это сделало его немного бессмысленным)

@hop Я действительно не знаю, о чем ты говоришь, первое редактирование добавило новую строку и отформатировало части оболочки как код, чтобы они отображались правильно. Я практически ничего не изменил, оригинальная ревизия здесь
Michael Mrozek

@ Майкл: ты прав, и мне жаль. я неверно истолковал разницу и подумал, что вы добавили галочки. делает вопрос еще более бессмысленным: приведенный пример должен работать.

@hop The Perl один? Я предполагал, что это не сработает без попыток, так как я не знаю Perl, но, думаю, он сказал: «Я не знаю, сработает ли следующее», так что, возможно, все в порядке; Вы, вероятно, просто должны ответить, что данный пример работает
Михаил Мрозек

Ответы:


19

Если вы просто хотите записать сингл yв stdin процесса, вы можете сделать это:

(echo y | nohup myprocess) &

Если вы хотите продолжать писать yпри каждом появившемся приглашении, coreutil yesсуществует именно для этой цели - он будет продолжать записывать все, что вы говорите, в стандартный вывод. По умолчанию выдается «y», поэтому вы можете просто:

(yes | nohup myprocess) &

но если вам нужно что-то еще, вы можете передать это в качестве аргумента


+1: я не видел, yesиспользовался в эонах
msw

Майкл, спасибо за быстрый ответ. Тем не менее, я думаю, что я попробовал ваше предложение, в котором я повторяю Y в процессе. Когда я это делаю, выходные данные всегда перетекают на мой терминал, несмотря на тот факт, что я обеспечил & есть в моем

& Не мешает выводу процесса на консоль. Это только начинает это в фоновом режиме.
fschmitt

как этот ответ как-то связан с вопросом?

@Riccardo Я немного поэкспериментировал и думаю, что ты прав. Исправлено, спасибо
Михаил Мрозек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.