ฉันไม่ทราบถึงสถานการณ์ที่tar
จะส่ง/dev/null
สัญญาณออกไปเป็นข้อผิดพลาดซึ่งเป็นวิธีที่รหัสของคุณพยายามตรวจหาข้อผิดพลาด นี่เป็นวิธีที่ถูกต้องในการตรวจสอบข้อผิดพลาด:
if tar -cf Archiv.tar myfolder/ myotherfolder/
then
echo "success"
else
echo "error - no such Directory or file"
fi
คุณอาจไม่ต้องการelse
กรณีเพราะtar
ตัวเองจะบ่นในกรณีนั้น หากการใช้งานของคุณ/dev/null
ควรจะระงับการtar
ร้องเรียนเพื่อให้คุณสามารถแทนที่ข้อความของคุณเองบรรทัดแรกควรเป็น:
if tar -cf Archiv.tar myfolder/ myotherfolder/ > /dev/null 2>&1
โปรดสังเกตว่าเราไม่ได้ใช้วงเล็บเหลี่ยมที่นี่ นั่นเป็นนามแฝงสำหรับคำสั่งเชลล์ในตัวที่เรียกว่าtest(1)
เป็นการดำเนินการทางตรรกะและส่งกลับ 0 หรือไม่ใช่ศูนย์เพื่อส่งสัญญาณความสำเร็จหรือความล้มเหลวตามลำดับ if
ในการตรวจสอบการเปิดสำหรับการนี้ 0 / ผลตอบแทนไม่ใช่ศูนย์ดังนั้นเพื่อที่จะตรวจสอบความสำเร็จของโปรแกรมเช่นtar
ที่ส่งกลับไม่ใช่ศูนย์ในความล้มเหลวคุณไม่จำเป็นต้องเกี่ยวข้องกับหรือนามแฝงของมันtest
[
หากคุณได้รับการฝึกอบรมเกี่ยวกับภาษาการเขียนโปรแกรมที่จำเป็นต้องมีเครื่องหมายวรรคตอนล้อมรอบการif
แสดงออกบางอย่างเพื่อให้ไม่มีเครื่องหมายวรรคตอนมารบกวนคุณที่นี่คุณสามารถเขียนบรรทัดแรกดังนี้:
tar -cf Archiv.tar myfolder/ myotherfolder/
if [ $? = 0 ]
สองบรรทัดนี้รวมกันทำสิ่งเดียวกันกับเวอร์ชันด้านบนเนื่องจากตัวแปรบิวด์อินเชลล์$?
เก็บรหัสสถานะของการรันโปรแกรมครั้งสุดท้าย
นี่อาจจะชัดเจนกว่า แต่ก็สิ้นเปลืองไปหน่อย