Виконати команду Nohup із введенням


11

У UNIX у мене є процес, який я хочу запустити за допомогою nohup. Однак цей процес в якийсь момент чекатиме підказку, куди я маю ввести yesабо noпродовжувати його. Поки в UNIX я робив наступне:

nohup myprocess <<EOF
y
EOF

Тож я запускаю процес "myprocess", використовуючи nohup і передаючи файл у файл з "y", а потім закриваю файл. Наведені вище рядки - це фактично три окремі команди - тобто я натискаю клавішу Enter на першому рядку в UNIX, тоді я отримую підказку, де я ввожу "y", а потім натискаю клавішу Enter, а потім нарешті набираю "EOF" і знову натискаю повернення. Так це прекрасно працює, але моя проблема нижче.

Я хочу зараз виконати це в Perl, але я не впевнений, як я можу виконати цю команду, оскільки вона знаходиться за трьома рядками. Я не знаю, чи спрацює наступне:

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

це має працювати так, як написано у запитанні (після першої редагування це зробило трохи безглуздим)

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

@Michael: ти маєш рацію, і мені шкода. я неправильно інтерпретував різницю і подумав, ви додали основи. робить питання ще більш безглуздим: приклад, як подано, повинен працювати.

@hop Перл? Я припустив, що це не спрацює, не намагаючись, як я не знаю, Perl, але я гадаю, що він сказав: "Не знаю, чи спрацює наступне", тому, можливо, це добре; вам, мабуть, слід просто відповісти, що даний приклад працює
Майкл Мрозек

Відповіді:


19

Якщо ви просто хочете записати сингл yв stdin процесу, ви можете зробити це:

(echo y | nohup myprocess) &

Якщо ви хочете продовжувати писати yдля кожного запиту, який з'являється, coreutil yesіснує саме для цієї мети - він продовжує писати все, що ви скажете йому для stdout. За замовчуванням виводиться "y", тож ви можете просто:

(yes | nohup myprocess) &

але якщо вам потрібно щось інше, ви можете передати це як аргумент


+1: Я не бачив yesвикористовуваних в еонах
msw

Майкл, дякую за швидку відповідь. Однак я думаю, що я спробував вашу пропозицію, завдяки чому я повторюю Y у процесі. Коли я це зробив, вихід завжди переливається на мій термінал, незважаючи на те, що я забезпечив & є в моєму

& Не перешкоджає запису результату процесу на консоль. Це просто запускається на задньому плані.
fschmitt

як ця відповідь має щось спільне з питанням?

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