Estou lendo um exemplo de script do shell 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
Estou tentando entender o uso de "/ dev / null 2> & 1" aqui. No começo, pensei que esse script usasse / dev / null para ignorar os erros normalmente, sem causar a falha do script (como tentar pegar o tratamento de exceções nas linguagens de programação). Porque não vejo como o uso do tar para compactar um diretório em um arquivo tar poderia causar qualquer tipo de erro.
tar
não está no seu $ PATH, porque tar
travou (você nunca sabe), porque não há espaço no dispositivo, porque a tar
versão mudou e agora requer sintaxe diferente, porque o disco causou um erro de E / S. Tenho certeza que você pode encontrar mais.
/dev/null
não evitará falhas, mas limpará os fluxos de saída stdout e stderr.tar
pode causar erros de várias maneiras. Você pode não ter acesso de gravação, o arquivo já pode existir etc.