我正在阅读一个示例bash shell脚本:
#!/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和stderr输出流。tar
可能以多种方式导致错误。您可能没有写访问权限,文件可能已经存在,等等