默认情况下,对于许多种错误,tar
都会将消息打印到 stderr 然后继续执行 - 这些错误称为“可恢复”错误,通常是与单个文件或存档成员相关的错误,例如权限问题。
有时这种行为确实令人讨厌。例如,如果我正在解压一个档案并且磁盘已满,那么我可能会得到如下结果:
tar: python-lib/PyML/classifiers/ext/_cgist.so: Wrote only 2048 of 10240 bytes
tar: python-lib/PyML/classifiers/ext/_csmo.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_csvmodel.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_knn.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_libsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_mylibsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/cgist.py: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/csmo.py: Cannot write: No space left on device
在大型档案中,这种情况可能会持续数千行。如果在脚本中发生这种情况,我宁愿tar
立即退出,这样我就可以向用户提示错误。
有没有办法tar
在看到第一个错误时强制退出?我在扫描中没有看到它tar --help
。任何合理的包装脚本方法都可以实现此目的,我将不胜感激。
答案1
一种方法是将标准错误输出重定向到/dev/full
,例如:
tar ... 2>/dev/full
当 tar 尝试将警告消息输出到 时,这将导致 失败stderr
。