Thực thi lệnh Nohup với đầu vào


11

Trong UNIX, tôi có một quy trình mà tôi muốn chạy bằng nohup. Tuy nhiên, quá trình này sẽ có lúc chờ tại một dấu nhắc mà tôi phải nhập yeshoặc nođể nó tiếp tục. Cho đến nay, trong UNIX tôi đã làm như sau:

nohup myprocess <<EOF
y
EOF

Vì vậy, tôi bắt đầu quá trình 'my process' bằng cách sử dụng nohup và pipe trong một tệp có 'y' sau đó đóng tệp. Các dòng trên đây thực sự là ba lệnh riêng biệt - tức là tôi nhấn enter trên dòng đầu tiên trong UNIX, sau đó tôi nhận được một lời nhắc nơi tôi nhập 'y' và sau đó nhấn enter để cuối cùng nhập 'EOF' và nhấn trở lại. Vì vậy, điều này hoạt động hoàn hảo, nhưng vấn đề của tôi là dưới đây.

Bây giờ tôi muốn thực hiện điều này trong Perl, nhưng tôi không chắc làm thế nào tôi có thể thực hiện lệnh này, vì nó có hơn ba dòng. Tôi không biết nếu những điều sau đây sẽ hoạt động:

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

điều này sẽ hoạt động theo cách nó được viết trong câu hỏi (sau lần chỉnh sửa đầu tiên khiến nó hơi vô lý)

@hop Tôi thực sự không biết bạn đang nói về cái gì, lần chỉnh sửa đầu tiên đã thêm một dòng mới và định dạng các phần vỏ dưới dạng mã để chúng hiển thị đúng. Tôi đã thay đổi hầu như không có gì, bản sửa đổi ban đầu ở đây
Michael Mrozek

@Michael: bạn nói đúng và tôi xin lỗi. Tôi hiểu sai về diff và nghĩ, bạn đã thêm backticks. làm cho câu hỏi thậm chí còn vô nghĩa hơn: ví dụ như được đưa ra sẽ hoạt động.

@hop Cái perl? Tôi cho rằng nó không hoạt động mà không thử vì tôi không biết perl, nhưng tôi đoán anh ta nói "Tôi không biết nếu những thứ sau sẽ hoạt động", vì vậy có lẽ nó vẫn ổn; có lẽ bạn chỉ nên trả lời rằng ví dụ đã cho hoạt động
Michael Mrozek

Câu trả lời:


19

Nếu bạn chỉ muốn viết một yđoạn cho stdin của tiến trình, bạn có thể làm điều này:

(echo y | nohup myprocess) &

Nếu bạn muốn tiếp tục viết ycho mọi dấu nhắc xuất hiện, coreutil yestồn tại cho chính xác mục đích này - nó sẽ tiếp tục viết bất cứ điều gì bạn nói với nó về thiết bị xuất chuẩn. Mặc định của nó là xuất "y", vì vậy bạn chỉ có thể:

(yes | nohup myprocess) &

nhưng nếu bạn cần một cái gì đó khác, bạn có thể vượt qua nó như một đối số


+1: Tôi chưa từng thấy yesđược sử dụng trong các
eons

Michael, cảm ơn bạn đã trả lời nhanh chóng của bạn. Tuy nhiên, tôi nghĩ rằng tôi đã thử đề xuất của bạn, theo đó tôi lặp lại Y trong quá trình này. Khi tôi thực hiện điều này, đầu ra luôn tràn vào thiết bị đầu cuối của tôi mặc dù thực tế là tôi đã đảm bảo và nằm trong

& Không ngăn chặn đầu ra quá trình được ghi vào bàn điều khiển. Nó chỉ bắt đầu nó trong nền.
fschmitt

Làm thế nào có câu trả lời này để làm gì với câu hỏi?

@Riccardo Tôi đã thử nghiệm một chút và tôi nghĩ bạn đã đúng. Đã sửa, cảm ơn
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.