ตามคำถาม:
ตัวแปรได้ $?
ถูกเขียนทับเมื่อมีการเรียกใช้คำสั่งอื่นในระหว่าง?
คำตอบคือ ใช่. ตัวแปร $?
มีสถานะการออกของงานล่าสุด ตัวอย่างเช่น:
$ เท็จ; ก้อง $?
1
$ เท็จ; จริง; ก้อง $?
0
$ เท็จ; จริง; เท็จ; ก้อง $?
1
เช่นเดียวกับตัวแปร $!
มี PID ของงานเบื้องหลังล่าสุด
อ้างอิง: Devhints.io: สูตรโกงการเขียนสคริปต์ Bash
ตามคำถาม:
คือ รอ $oldpid
ยุ่งกับวิธีการแบบอะซิงโครนัสของ ไม่อัพ
?
ไม่ควร - มันไม่ได้ออกแบบมาสำหรับงานดังกล่าวใช่หรือไม่? :)
ตามคำถาม:
หรือบางทีตรรกะนี้อาจเป็นเรื่องโง่ ๆ และมีแนวทางที่ดีกว่านี้?
สำหรับฉันมันไม่ชัดเจนว่าทำไมคุณถึงผลักดัน รีซิงค์
เข้าไปใน พื้นหลัง แล้ว รอ
แทนเพียงแค่รันคำสั่งแล้วทำการทดสอบ
#!/bin/bash
rsync -a source.file ปลายทาง ไฟล์ 2>/dev/null
ถ้า [[ $? -eq 0 ]]; จากนั้น echo "สำเร็จ"; อื่น ๆ สะท้อน "ล้มเหลว"; ไฟ
2>/dev/null
ใช้ที่นี่เพื่อระงับข้อความแสดงข้อผิดพลาดของ รีซิงค์
แต่คุณสามารถบันทึกไว้ในไฟล์ temp และแนบไปกับอีเมลได้
แต่คงไม่ใช่สคริปต์ทั้งหมด...
นอกจากนี้ ในแถวแรกของ ช่วยรอ
มีการให้ข้อมูลดังต่อไปนี้
รอ: รอ [-fn] [id ...]
รอให้งานเสร็จสิ้นและส่งคืนสถานะการออก
ดังนั้นคุณสามารถใช้ผลลัพธ์ของ รอ
โดยตรงภายใน ถ้า
คำแถลง. ฉันได้ทำการทดสอบแนวทางนี้สำเร็จแล้ว
#!/bin/bash
nohup rsync -a source.file ปลายทางไฟล์ 2>/dev/null &
oldpid=$!
ถ้ารอ $oldpid
แล้ว
สะท้อน "ความสำเร็จ"
อื่น
เสียงสะท้อน "ล้มเหลว"
ไฟ
2>/dev/null
ใช้ที่นี่เพื่อระงับข้อความแสดงข้อผิดพลาดของ ไม่อัพ
, ในขณะที่ รีซิงค์
ข้อความแสดงข้อผิดพลาดไปที่ไหนสักแห่งในพื้นหลัง