Jalankan perintah Nohup dengan input

11

Di UNIX, saya memiliki proses yang ingin saya jalankan menggunakan nohup. Namun, proses ini pada suatu saat akan menunggu di prompt di mana saya harus masuk yesatau nountuk melanjutkan. Sejauh ini, di UNIX saya telah melakukan hal berikut:

nohup myprocess <<EOF
y
EOF

Jadi saya memulai proses 'myprocess' menggunakan nohup dan pipa dalam file dengan 'y' kemudian tutup file tersebut. Baris di atas secara efektif adalah tiga perintah terpisah - yaitu saya menekan enter pada baris pertama di UNIX, lalu saya mendapatkan prompt di mana saya memasukkan 'y' dan kemudian tekan enter untuk akhirnya mengetik 'EOF' dan tekan kembali lagi. Jadi ini berfungsi dengan baik, tetapi masalah saya ada di bawah ini.

Saya ingin sekarang menjalankan ini di Perl, tetapi saya tidak yakin bagaimana saya bisa menjalankan perintah ini, karena ini lebih dari tiga baris. Saya tidak tahu apakah yang berikut ini akan berfungsi:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`
Jeff Schaller
sumber
ini harus bekerja seperti yang tertulis dalam pertanyaan (setelah edit pertama membuatnya agak tidak masuk akal)
@ hop Saya benar-benar tidak tahu apa yang Anda bicarakan, edit pertama menambahkan baris baru dan memformat bagian shell sebagai kode sehingga mereka akan ditampilkan dengan benar. Saya hampir tidak mengubah apa pun, revisi asli ada di sini
Michael Mrozek
@Michael: Anda benar dan saya minta maaf. Saya salah menafsirkan diff dan berpikir, Anda telah menambahkan backticks. menjadikan pertanyaan itu lebih tidak masuk akal: contoh seperti yang diberikan seharusnya berhasil.
@hop Yang perl? Saya berasumsi itu tidak bekerja tanpa mencoba karena saya tidak tahu perl, tapi saya kira dia berkata "Saya tidak tahu apakah yang berikut ini akan berhasil", jadi mungkin itu baik-baik saja; Anda mungkin seharusnya hanya menjawab bahwa contoh yang diberikan bekerja
Michael Mrozek

Jawaban:

19

Jika Anda hanya ingin menulis satu yuntuk stdin dari proses, Anda dapat melakukan ini:

(echo y | nohup myprocess) &

Jika Anda ingin terus menulis yuntuk setiap prompt yang muncul, coreutil yesada untuk tujuan ini - itu akan terus menulis apa pun yang Anda kirim ke stdout. Standarnya adalah output "y", jadi Anda bisa:

(yes | nohup myprocess) &

tetapi jika Anda membutuhkan sesuatu yang lain, Anda dapat menyampaikannya sebagai argumen

Michael Mrozek
sumber
+1: Saya belum pernah melihat yesdigunakan dalam ribuan tahun
msw
Michael, terima kasih atas balasan secepatnya. Namun, saya pikir saya sudah mencoba saran Anda di mana saya menggemakan Y ke dalam proses. Ketika saya sudah melakukan ini, output selalu tumpah ke terminal saya terlepas dari kenyataan bahwa saya sudah memastikan & ada di saya
& Tidak mencegah output proses ditulis ke konsol. Itu hanya memulainya di latar belakang.
fschmitt
bagaimana jawaban ini ada hubungannya dengan pertanyaan?
@ Riccardo Saya bereksperimen sedikit, dan saya pikir Anda benar. Tetap, terima kasih
Michael Mrozek