Czytam przykładowy skrypt powłoki bash:
#!/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
Próbuję zrozumieć użycie „/ dev / null 2> & 1” tutaj. Na początku myślałem, że ten skrypt używa / dev / null, aby z wdziękiem ignorować błędy bez powodowania awarii skryptu (coś w rodzaju próby obsługi wyjątków w językach programowania). Ponieważ nie widzę, jak użycie tar do skompresowania katalogu do pliku tar może spowodować jakiekolwiek błędy.
tar
nie ma go w $ PATH, ponieważ tar
zawiesił się (nigdy nie wiadomo), ponieważ na urządzeniu nie ma już miejsca, ponieważ tar
wersja uległa zmianie i teraz wymaga innej składni, ponieważ dysk spowodował błąd we / wy. Jestem pewien, że możesz znaleźć więcej.
/dev/null
nie zapobiegnie awariom, ale wyczyści strumienie wyjściowe stdout i stderr.tar
może powodować błędy na różne sposoby. Być może nie masz dostępu do zapisu, plik może już istnieć itp.