Cách thực thi nhiều lệnh bằng cách sử dụng nohup


41

Tôi cần phải thực thi nhiều lệnh bằng cách sử dụng nohup. Mỗi lệnh nên được thực hiện sau lệnh trước đó.

Tôi đã sử dụng lệnh này làm ví dụ:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

Tuy nhiên lệnh đó đã không hoạt động.

Tôi nên sử dụng lệnh nào cho mục đích này?

Câu trả lời:


55

Gói nó trong sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
Khi tôi khởi chạy nohup, tôi nhận được "nohup: bỏ qua đầu vào và chuyển hướng stderr sang stdout", vì vậy không phải là "2> & 1" sao lưu?
harschware

1
Có lẽ. Tôi nghĩ khi tôi viết câu trả lời tôi chỉ sao chép nó từ câu hỏi.
jw013

6

Sẽ không đơn giản hơn nhiều khi tạo danh sách các lệnh của bạn trong một tệp shell riêng, ví dụ lệnh.sh, mà không có bất kỳ tiếng ồn nào.

Sau đó, bạn gọi:

nohup bash command.sh

4

Những người khác đã trả lời về nohup. Như một lưu ý phụ thực tế: Tôi khuyên bạn nên thực hiện loại điều này trong một screenhoặc một tmuxphiên. Bằng cách đó bạn có thể ngắt kết nối, sau đó kết nối lại sau và xem kết quả đầu ra và kết quả cuối cùng.


1
Câu trả lời này rất tốt cho các kịch bản tương tác, nhưng không có ý nghĩa đối với các tập lệnh hoặc tự động hóa.
Jonathan Hartley

0

Nó sẽ đơn giản hơn như thế này:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

Tuy nhiên, điều này có thể gây ra sự cố nếu các URL chứa các ký tự đặc biệt để có thể sử dụng tùy chọn an toàn hơn:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
Cách duy nhất an toàn để vượt qua các thông số để sh -clà thông qua đối số riêng biệt, có thể được truy cập thông qua các tham số vị trí ( $0, $1, ...). Không có cách dễ dàng hoặc đơn giản để trích dẫn các đối số đúng cho phân tích chuỗi. Nỗ lực của bạn để sử dụng dấu ngoặc kép đã thoát không thành công nếu $urlbản thân nó có chứa dấu ngoặc kép. Hãy a='problem"'; sh -c "echo \"$a\""tự thử và xem - bạn sẽ gặp lỗi cú pháp vì sh -ccố chạy echo "problem"".
jw013

@ jw013 Không quan tâm, phản đối của bạn có áp dụng như nhau cho câu trả lời được chấp nhận bởi -oh. Bởi bạn. Có lẽ là không, sau đó. Nhưng tôi không hiểu tại sao không! :-)
Jonathan Hartley

1
@JonathanHartley Tôi không chắc là tôi hiểu câu hỏi của bạn. Nếu bạn so sánh câu trả lời này với tôi một cách cẩn thận, bạn sẽ nhận thấy sự khác biệt trong cách sử dụng $url$url2được sử dụng.
jw013

@ jw013 À, dĩ nhiên rồi. Tôi đã ngớ ngẩn. Cảm ơn bạn đã đặt tôi thẳng.
Jonathan Hartley
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.