gpt4 book ai didi

macos - OS X上的grep -f产生段错误

转载 作者:行者123 更新时间:2023-12-04 08:44:50 26 4
gpt4 key购买 nike

如果您有Mac,请尝试以下操作:

echo 'abcd*' > grepfile
echo 'abc$' >> grepfile
echo '^abc' >> grepfile
echo "fojeiwuroiuwet\nljfajsljkfabcdddjlfkajlkj\nabcaaa\nzzzabc\n" | grep -f grepfile

这是版本:
$ grep --v
grep (BSD grep) 2.5.1-FreeBSD

这是一台与Apple的软件更新保持同步的机器(2012年款的rMBP),所以我的操作系统是10.8.4。

我验证了从源代码编译的GNU grep不会遭受此问题的困扰。实际上,它是2.14版,是2.5.1之后的很多版本。

但是,如果没有针对每个正则表达式派生一个grep的效率非常低下的循环,又如何能针对一系列正则表达式测试某些输入的任务呢?

编辑:我采取的解决此问题的方法类似于: while read REGEX; do [[ ... =~ $REGEX ]] ... done < regexfile

问题:这是此版本的grep的已知错误吗?我们如何设置我们的系统,以便它们可以与grep的正则文件一起正常工作?

更新:似乎有些人报告说它工作正常(即使使用特定的FreeBSD 2.5.1 grep)。我可以采取哪些步骤来尝试确定可能使用的是哪个.so/.dylib?有人可以做一个 shasum /usr/bin/grep并告诉我它是否对您有用吗? (我不确定这是否会提供很多信息,但是我想知道的是我的计算机配置是否搞砸了,或者这是否是该软件版本存在的实际问题。)
$ shasum /usr/bin/grep
eac59389d09642decbb8551e2c975f795934bfbf /usr/bin/grep

这是更多信息:
$ codesign -dvvv /usr/bin/grep
Executable=/usr/bin/grep
Identifier=com.apple.zgrep
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=224 flags=0x0(none) hashes=6+2 location=embedded
Hash type=sha1 size=20
CDHash=93b823c000188f8737653d8333c90a6db9361d70
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist=not bound
Sealed Resources=none
Internal requirements count=2 size=208

进一步的调查:
$ gdb /usr/bin/grep
GNU gdb 6.3.50-20050815 (Apple version gdb-1824) (Thu Nov 15 10:42:43 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .... done

(gdb) start -f grepfile
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n])
Starting program: /usr/bin/grep -f grepfile
Reading symbols for shared libraries +++.............................. done
abc
abc

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000101000000
0x00007fff89b5d1b3 in memchr ()
(gdb) where
#0 0x00007fff89b5d1b3 in memchr ()
#1 0x00007fff89b8e45a in __sfvwrite ()
#2 0x00007fff89b8e861 in fwrite ()
#3 0x0000000100003138 in _mh_execute_header ()
#4 0x0000000100002988 in _mh_execute_header ()
#5 0x0000000100001c28 in _mh_execute_header ()
#6 0x00007fff8e2d57e1 in start ()
(gdb)

我也重新启动了计算机。它在gdb中重复执行相同的操作。

最佳答案

我在MacBook Air上安装了OSX 10.8.4,默认情况下您的示例不会崩溃,而仅在添加--color参数时才会崩溃。

说明

当您将通配符(星号)与终端颜色混合使用时,通常会发生此崩溃,这是软件错误。

还要检查另一个更简单的示例:

echo 'abc*' | grep --color=auto -e ".*" -e a

在这里, --color=auto似乎有所作为(没有它或未将其设置为 never,那么它不会崩溃)。
因此,我假设您的grep默认情况下在终端中使用颜色。

解决方案

确保您的grep不是已启用颜色的grep的别名,或者默认情况下未启用颜色。

您始终可以尝试使用 --color=never运行grep。

对于永久解决方案,我已经报告了错误报告:

http://www.freebsd.org/cgi/query-pr.cgi?pr=181263

因此问题可以在软件本身中解决。

如果您想访问更详细的崩溃日志,请转到控制台,显示日志列表,然后在“用户诊断报告”下找到崩溃日志。

例如。:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_c.dylib 0x00007fff8a8da1b3 memchr + 15
1 libsystem_c.dylib 0x00007fff8a90b45a __sfvwrite + 578
2 libsystem_c.dylib 0x00007fff8a90b861 fwrite + 114
3 grep 0x000000010a4a3138 0x10a4a0000 + 12600
4 grep 0x000000010a4a2988 0x10a4a0000 + 10632
5 grep 0x000000010a4a1c28 0x10a4a0000 + 7208
6 libdyld.dylib 0x00007fff8daf77e1 start + 1

这是有关崩溃的一些更详细的说明:
A quick test

$ env -i bsdgrep -Fi without_nls usr.bin/grep/grep.c
$ env -i gnugrep -Fi without_nls usr.bin/grep/grep.c
#ifndef WITHOUT_NLS
#ifndef WITHOUT_NLS
#ifndef WITHOUT_NLS

shows that bsd fgrep already fails to ignore case. And if you throw
a few more options to the mix it'd crash, e.g.

$ env -i LC_CTYPE=en_US.UTF-8 TERM=xterm bsdgrep --color -Fir without_nls usr.bin/grep/
[...]
Program received signal SIGSEGV, Segmentation fault.
0x0000000801007ff2 in memchr (s=0x61167a, c=10, n=18446744073707490297) at /usr/src/lib/libc/string/memchr.c:48
48 if (*p++ == (unsigned char)c)
(gdb) bt
#0 0x0000000801007ff2 in memchr (s=0x61167a, c=10, n=18446744073707490297) at /usr/src/lib/libc/string/memchr.c:48
#1 0x0000000801007b03 in __sfvwrite (fp=0x801247770, uio=0x7fffffffd8f0) at /usr/src/lib/libc/stdio/fvwrite.c:170
#2 0x0000000801007698 in fwrite (buf=0x608c03, size=18446744073709551606, count=1, fp=0x801247770)
at /usr/src/lib/libc/stdio/fwrite.c:95
#3 0x0000000000405498 in printline (line=0x7fffffffdb70, sep=58, matches=0x7fffffffd990, m=9)
at /usr/src/usr.bin/grep/util.c:500
#4 0x0000000000404f51 in procline (l=0x7fffffffdb70, nottext=0) at /usr/src/usr.bin/grep/util.c:381
#5 0x000000000040489f in procfile (fn=0x80140b600 "usr.bin/grep/nls/es_ES.ISO8859-1.msg") at /usr/src/usr.bin/grep/util.c:239
#6 0x00000000004044d7 in grep_tree (argv=0x7fffffffdd30) at /usr/src/usr.bin/grep/util.c:163
#7 0x0000000000403ea9 in main (argc=5, argv=0x7fffffffdd10) at /usr/src/usr.bin/grep/grep.c:689

资料来源: http://lists.freebsd.org/pipermail/freebsd-current/2011-August/026502.html

同样,即使使用相同的版本,似乎在不同的OSX上也存在不同的grep二进制文件:
$ grep --v
grep (BSD grep) 2.5.1-FreeBSD
$ shasum /usr/bin/grep
350ee11e1868e18c9707ea7035184a114f40badf /usr/bin/grep
$ codesign -dvvv /usr/bin/grep
Executable=/usr/bin/grep
Identifier=com.apple.zgrep
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=224 flags=0x0(none) hashes=6+2 location=embedded
Hash type=sha1 size=20
CDHash=1537b3ed49878d5d18482859a37318164a2a40f1
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist=not bound
Sealed Resources=none
Internal requirements count=2 size=176

关于macos - OS X上的grep -f产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com