Wykonaj polecenie Nohup z wejściem

11

W systemie UNIX mam proces, który chcę uruchomić za pomocą nohup. Jednak ten proces będzie w pewnym momencie czekał na monit, w którym muszę wejść yeslub nokontynuować. Do tej pory w UNIX wykonywałem następujące czynności:

nohup myprocess <<EOF
y
EOF

Więc zaczynam proces „mójproces” za pomocą nohup i potokuję w pliku za pomocą „y”, a następnie zamykam plik. Powyższe wiersze są w rzeczywistości trzema osobnymi poleceniami - tzn. Nacisnąłem enter w pierwszym wierszu w systemie UNIX, a następnie dostaję monit, w którym wpisuję „y”, a następnie naciśnij enter, aby w końcu wpisać „EOF” i ponownie naciśnij klawisz Return. To działa idealnie, ale mój problem jest poniżej.

Chcę teraz wykonać to w Perlu, ale nie jestem pewien, jak mogę wykonać to polecenie, ponieważ ma ono ponad trzy wiersze. Nie wiem, czy następujące elementy będą działać:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`
Jeff Schaller
źródło
to powinno działać tak, jak jest napisane w pytaniu (po pierwszej edycji uczyniło to trochę nonsensownym)
@hop Naprawdę nie wiem o czym mówisz, pierwsza edycja dodała nowy wiersz i sformatowała części powłoki jako kod, aby były poprawnie wyświetlane. Prawie nic nie zmieniłem, oryginalna wersja jest tutaj
Michael Mrozek
@Michael: masz rację i przepraszam. źle zinterpretowałem diff i pomyślałem, że dodałeś backtyki. czyni to pytanie jeszcze bardziej bezsensownym: podany przykład powinien zadziałać.
@hop Perl one? Zakładałem, że to nie zadziałało bez próby, ponieważ nie znam Perla, ale chyba powiedział: „Nie wiem, czy następujące będą działać”, więc może jest w porządku; prawdopodobnie powinieneś po prostu odpowiedzieć, że podany przykład działa
Michael Mrozek

Odpowiedzi:

19

Jeśli chcesz po prostu napisać singiel yna początku procesu, możesz to zrobić:

(echo y | nohup myprocess) &

Jeśli chcesz kontynuować pisanie ydla każdego pojawiającego się monitu, coreutil yesistnieje właśnie w tym celu - będzie zapisywał wszystko, co mu powiesz na standardowe wyjście. Domyślnie jest to wyjście „y”, więc możesz po prostu:

(yes | nohup myprocess) &

ale jeśli potrzebujesz czegoś innego, możesz przekazać to jako argument

Michał Mrożek
źródło
+1: Nie widziałem yesużywane przez eony
msw
Michael, dziękuję za szybką odpowiedź. Wydaje mi się jednak, że wypróbowałem twoją sugestię, w ramach której wysyłam echo Y do procesu. Kiedy to robię, wyjście zawsze wylewa się na mój terminal, mimo że zapewniłem, że & jest w moim
Znak & nie zapobiega zapisywaniu danych wyjściowych procesu na konsoli. Po prostu zaczyna się w tle.
fschmitt
jak ta odpowiedź ma coś wspólnego z pytaniem?
@ Riccardo Trochę eksperymentowałem i myślę, że masz rację. Naprawiono, dzięki
Michael Mrozek