ฉันกำลังอ่านสคริปต์เปลือกทุบตีตัวอย่าง:
#!/bin/bash
# This script makes a backup of my home directory.
cd /home
# This creates the archive
tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1
# First remove the old bzip2 file. Redirect errors because this generates some if the archive
# does not exist. Then create a new compressed file.
rm /var/tmp/home_franky.tar.bz2 2> /dev/null
bzip2 /var/tmp/home_franky.tar
# Copy the file to another host - we have ssh keys for making this work without intervention.
scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1
# Create a timestamp in a logfile.
date >> /home/franky/log/home_backup.log
echo backup succeeded >> /home/franky/log/home_backup.log
ฉันพยายามเข้าใจการใช้ "/ dev / null 2> & 1" ที่นี่ ตอนแรกฉันคิดว่าสคริปต์นี้ใช้ / dev / null เพื่อละเว้นข้อผิดพลาดอย่างงดงามโดยไม่ทำให้สคริปต์ขัดข้อง (เช่นลองจับข้อยกเว้นในภาษาการเขียนโปรแกรม) เนื่องจากฉันไม่เห็นวิธีการใช้ tar ในการบีบอัดไดเรกทอรีลงในไฟล์ tar อาจทำให้เกิดข้อผิดพลาดประเภทใด ๆ
tar
ไม่ได้อยู่ใน $ PATH ของคุณเพราะtar
เกิดข้อผิดพลาด (คุณไม่มีทางรู้) เพราะไม่มีพื้นที่เหลือบนอุปกรณ์เนื่องจากtar
เวอร์ชันเปลี่ยนไปและตอนนี้ต้องใช้ไวยากรณ์ที่แตกต่างกันเนื่องจากดิสก์ทำให้เกิดข้อผิดพลาด I / O ฉันแน่ใจว่าคุณสามารถหาข้อมูลเพิ่มเติมได้
/dev/null
จะไม่ป้องกันการหยุดทำงาน แต่จะทำความสะอาดสตรีมเอาต์พุต stdout และ stderrtar
อาจทำให้เกิดข้อผิดพลาดได้หลายวิธี คุณอาจไม่มีสิทธิ์ในการเขียนไฟล์อาจมีอยู่แล้วเป็นต้น