我们正在尝试找到一种方法来制作可在几乎所有 Unix 兼容系统上运行的 GNUmakefile。我们正在使用egrep
,但在 MinGW 上失败了。我们切换到grep -E
因为它是波斯克斯,但测试表明它在 Solaris 11 上失败。
makefile 中的典型用法是:
GREP ?= grep
...
IS_X86 := $(shell uname -m | $(GREP) -v "x86_64" | $(GREP) -i -c -E "i.86|x86|i86")
IS_X64 := $(shell uname -m | $(GREP) -i -c -E "(_64|d64)")
结果是:
grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
...
我没有看到Posix 中-E
and-F
是可选的(也许我错过了)。我发现Solaris 和 POSIX 之间的区别在 Stack Overflow 上,但它指出,“Solaris 有全套 POSIX 接口......”。
为什么Solarisgrep
无法消费-E
?除了切换到 Solaris 之外,还有其他方法可以在 Solaris 上使用正则表达式支持吗egrep
?
我刚刚在 Solaris 11.3 计算机上设置了一个新的测试帐户,以确保我没有污染环境。
该帐户已添加:
# useradd -d /export/home/test -m -s /bin/ksh -c "Testing Accoung" test
80 blocks
PATH
登录后检查:
test@solaris:~$ echo $PATH
/usr/bin:/usr/sbin
答案1
公用事业
如果 POSIX.2、POSIX.2a、XPG4、SUS 或 SUSv2 所需的行为与历史 Solaris 实用程序行为冲突,则该实用程序的原始 Solaris 版本将保持不变;中提供了符合标准的新版本
/usr/xpg4/bin
。对于希望利用 POSIX.2、POSIX.2a、XPG4、SUS 或 SUSv2 功能的应用程序,应在找到这些规范指定的实用程序的任何其他目录之前设置PATH
(sh
或ksh
) 或path
( ) 环境变量,例如、、、 和。csh
/usr/xpg4/bin
/bin
/usr/bin
/usr/ucb
/usr/ccs/bin
如果您必须使用扩展正则表达式,请/usr/xpg4/bin
尽早设置PATH
并使用grep -E
.