我有这个
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)
正如您所看到的,我一直在尝试使用this blog post过滤掉焦油烦人的,无用的“套接字忽略”错误.
我在执行时从shell获得的是:
/bin/sysback: line 45: Syntax error near unexpected token
>'
tar -Pzcpf /backups/backup –directory=/
/bin/sysback: line 45:
–exclude=proc –exclude=sys –exclude=dev/pts –exclude=backups –exclude=var/log / 2> >(grep -v ‘socket ignored’ >&2)’
解决方法
您使用的语法是基本shell语法的bash扩展,因此您必须注意使用bash运行脚本. (Ksh也有>(…)进程替换但在重定向后不支持它.Zsh会好的.)
鉴于您收到的错误消息,您在bash中运行此脚本,但在其POSIX兼容模式下,而不是在完全bash模式下.注意使用明确的#!/ bin / bash行来调用脚本. #!/ bin / sh不会这样做,即使/ bin / sh是bash的符号链接,因为如果以名称sh调用bash,则bash以POSIX模式运行.如果使用bash功能,请始终按名称调用bash.
如果要使用bash功能,请注意不要设置环境变量POSIXLY_CORRECT或在命令行上传递–posix选项.
或者,不要使用这种特定于bash的语法;使用便携式构造,例如Stephane Rouberol提出的构造.