带有进程替换的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)
如您所见,我一直在尝试使用此博客文章通过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’套接字被忽略’>&2)’
回答:
您使用的语法是基本Shell语法的bash扩展,因此您必须小心使用bash运行脚本。(Ksh也具有>(…)
进程替换,但在重定向后不支持它。Zsh可以。)
给定您收到的错误消息,您正在bash中运行此脚本,但是以其POSIX兼容模式运行,而不是以完全bash模式运行。注意用显式#!/bin/bash
行调用脚本。#!/bin/sh
即使/bin/sh
是bash的符号链接也不会这样做,因为bash如果以name调用,则以POSIX模式运行sh
。如果使用bash功能,请始终按名称调用bash。
如果要使用bash功能,也请注意不要设置环境变量POSIXLY_CORRECT
或--posix
在命令行上传递选项。
以上是 带有进程替换的Shell脚本中的语法错误 的全部内容, 来源链接: utcz.com/qa/398474.html