nohupฉันจำเป็นต้องดำเนินการคำสั่งต่างๆโดยใช้ แต่ละคำสั่งควรถูกเรียกใช้งานหลังจากคำสั่งก่อนหน้า
ฉันใช้คำสั่งนี้เป็นตัวอย่าง:
nohup wget $url && wget $url2 > /dev/null 2>&1 &
อย่างไรก็ตามคำสั่งนั้นไม่ทำงาน
ฉันควรใช้คำสั่งอะไรเพื่อจุดประสงค์นี้
nohupฉันจำเป็นต้องดำเนินการคำสั่งต่างๆโดยใช้ แต่ละคำสั่งควรถูกเรียกใช้งานหลังจากคำสั่งก่อนหน้า
ฉันใช้คำสั่งนี้เป็นตัวอย่าง:
nohup wget $url && wget $url2 > /dev/null 2>&1 &
อย่างไรก็ตามคำสั่งนั้นไม่ทำงาน
ฉันควรใช้คำสั่งอะไรเพื่อจุดประสงค์นี้
คำตอบ:
ห่อในsh -c:
nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
มันจะไม่ง่ายกว่าการสร้างรายการคำสั่งของคุณในไฟล์เชลล์แยกต่างหากเช่น command.sh โดยไม่มีคำสั่งใด ๆ
จากนั้นคุณโทร:
nohup bash command.sh
คนอื่น ๆ nohupได้ตอบแล้วเกี่ยวกับ ในฐานะที่เป็นหมายเหตุด้านการปฏิบัติ: ฉันขอแนะนำให้ทำสิ่งนี้ภายในscreenหรือtmuxเซสชัน ด้วยวิธีนี้คุณสามารถยกเลิกการเชื่อมต่อจากนั้นเชื่อมต่อใหม่ในภายหลังและดูผลลัพธ์และผลลัพธ์สุดท้าย
มันจะง่ายกว่านี้:
nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &
อย่างไรก็ตามเรื่องนี้อาจทำให้เกิดปัญหาหาก URL มีอักขระพิเศษดังนั้นสำหรับตัวเลือกที่ปลอดภัยกว่าที่คุณสามารถใช้ได้:
nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
sh -cผ่านการขัดแย้งที่แยกต่างหากซึ่งสามารถเข้าถึงได้ผ่านพารามิเตอร์ตำแหน่ง ( $0, $1, ... ) ไม่มีวิธีที่ง่ายหรือง่ายในการอ้างอิงอาร์กิวเมนต์อย่างถูกต้องสำหรับการวิเคราะห์สตริง ความพยายามในการใช้เครื่องหมายคำพูดคู่ที่หลบหนีล้มเหลวหาก$urlตัวเองมีเครื่องหมายคำพูดคู่ ลองa='problem"'; sh -c "echo \"$a\""ตัวเองและดู - คุณควรจะได้รับข้อผิดพลาดทางไวยากรณ์เพราะพยายามที่จะเรียกใช้sh -c echo "problem""
$urlและการ$url2ใช้งาน