linux – 带有进程替换的shell脚本中的语法错误

前端之家收集整理的这篇文章主要介绍了linux – 带有进程替换的shell脚本中的语法错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个 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 >'
/bin/sysback: line 45:
tar -Pzcpf /backups/backup –directory=/
–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提出的构造.

猜你在找的Linux相关文章