Mil*_*eri 8 linux bash shell process-substitution
我有这个shell脚本,用于备份我的系统.有一条线:
tar -Pzcpf /backups/backup.tar.gz --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups --exclude=var/log / 2> >(grep -v 'socket ignored' >&2)
正如您所看到的,我一直试图通过tar过滤掉烦人的,无用的"套接字忽略"错误,使用此博客文章.
我在执行时从shell获得的是:
/ bin/sysback:第45行:意外令牌附近的语法错误
>' /bin/sysback: line 45:tar -Pzcpf/backups/backup --directory =/--exclude = proc --exclude = sys --exclude = dev/pts --exclude = backups --exclude = var/log/2 >>(grep -v'cocket ignored'>&2)'
Gil*_*il' 19
您使用的语法是基本shell语法的bash扩展,因此您必须注意使用bash运行脚本.(Ksh也有>(…)进程替换但在重定向后不支持它.Zsh会好的.)
鉴于您收到的错误消息,您在bash中运行此脚本,但在其POSIX兼容模式下,而不是在完全bash模式下.注意使用显式#!/bin/bash行调用脚本.#!/bin/sh即使/bin/sh是bash的符号链接也不会这样做,因为bash在POSIX模式下运行,如果它在名称下调用的话sh.如果使用bash功能,请始终按名称调用bash.
如果要使用bash功能,请注意不要设置环境变量POSIXLY_CORRECT或--posix在命令行上传递选项.
或者,不要使用这种特定于bash的语法; 使用便携式构造,例如Stephane Rouberol提出的构造.
怎么样:
 tar -Pzcpf /backups/backup.tar.gz --directory=/ \
     --exclude=proc --exclude=sys --exclude=dev/pts \
     --exclude=backups --exclude=var/log 2>&1 | grep -v 'socket ignored'
| 归档时间: | 
 | 
| 查看次数: | 5509 次 | 
| 最近记录: |