วิธีเรียกใช้งานหลายคำสั่งโดยใช้ nohup


41

nohupฉันจำเป็นต้องดำเนินการคำสั่งต่างๆโดยใช้ แต่ละคำสั่งควรถูกเรียกใช้งานหลังจากคำสั่งก่อนหน้า

ฉันใช้คำสั่งนี้เป็นตัวอย่าง:

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

อย่างไรก็ตามคำสั่งนั้นไม่ทำงาน

ฉันควรใช้คำสั่งอะไรเพื่อจุดประสงค์นี้

คำตอบ:


55

ห่อในsh -c:

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

1
เมื่อฉันเปิดตัว nohup ฉันจะได้รับ "nohup: ไม่สนใจอินพุตและเปลี่ยนเส้นทาง stderr ไปยัง stdout" ดังนั้น "2> & 1" ซ้ำซ้อนไม่ใช่หรือ
harschware

1
อาจ. ฉันคิดว่าเมื่อฉันเขียนคำตอบฉันเพิ่งคัดลอกมาจากคำถาม
jw013

6

มันจะไม่ง่ายกว่าการสร้างรายการคำสั่งของคุณในไฟล์เชลล์แยกต่างหากเช่น command.sh โดยไม่มีคำสั่งใด ๆ

จากนั้นคุณโทร:

nohup bash command.sh

4

คนอื่น ๆ nohupได้ตอบแล้วเกี่ยวกับ ในฐานะที่เป็นหมายเหตุด้านการปฏิบัติ: ฉันขอแนะนำให้ทำสิ่งนี้ภายในscreenหรือtmuxเซสชัน ด้วยวิธีนี้คุณสามารถยกเลิกการเชื่อมต่อจากนั้นเชื่อมต่อใหม่ในภายหลังและดูผลลัพธ์และผลลัพธ์สุดท้าย


1
คำตอบนี้ยอดเยี่ยมสำหรับสถานการณ์แบบโต้ตอบ แต่ไม่มีเหตุผลสำหรับสคริปต์หรือระบบอัตโนมัติ
Jonathan Hartley

0

มันจะง่ายกว่านี้:

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

อย่างไรก็ตามเรื่องนี้อาจทำให้เกิดปัญหาหาก URL มีอักขระพิเศษดังนั้นสำหรับตัวเลือกที่ปลอดภัยกว่าที่คุณสามารถใช้ได้:

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

3
วิธีที่ปลอดภัยเท่านั้นที่จะส่งผ่านพารามิเตอร์ที่จะsh -cผ่านการขัดแย้งที่แยกต่างหากซึ่งสามารถเข้าถึงได้ผ่านพารามิเตอร์ตำแหน่ง ( $0, $1, ... ) ไม่มีวิธีที่ง่ายหรือง่ายในการอ้างอิงอาร์กิวเมนต์อย่างถูกต้องสำหรับการวิเคราะห์สตริง ความพยายามในการใช้เครื่องหมายคำพูดคู่ที่หลบหนีล้มเหลวหาก$urlตัวเองมีเครื่องหมายคำพูดคู่ ลองa='problem"'; sh -c "echo \"$a\""ตัวเองและดู - คุณควรจะได้รับข้อผิดพลาดทางไวยากรณ์เพราะพยายามที่จะเรียกใช้sh -c echo "problem""
jw013

@ jw013 การคัดค้านของคุณมีผลกับคำตอบที่ยอมรับโดย -oh หรือไม่ โดยคุณ. ไม่ใช่อย่างนั้น แต่ฉันไม่เข้าใจว่าทำไมไม่! :-)
Jonathan Hartley

1
@JonathanHartley ฉันไม่แน่ใจว่าฉันเข้าใจคำถามของคุณ หากคุณเปรียบเทียบคำตอบนี้กับฉันอย่างระมัดระวังคุณควรสังเกตเห็นความแตกต่างในวิธีการ$urlและการ$url2ใช้งาน
jw013

@ jw013 อาแน่นอน ฉันเป็นคนโง่ ขอบคุณสำหรับการตั้งค่าฉันตรง
Jonathan Hartley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.