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
ใช้งาน