grep -f unter OS X erzeugt Segfault
Wenn Sie einen Mac haben, versuchen Sie Folgendes:
echo 'abcd*' > grepfile
echo 'abc$' >> grepfile
echo '^abc' >> grepfile
echo "fojeiwuroiuwet\nljfajsljkfabcdddjlfkajlkj\nabcaaa\nzzzabc\n" | grep -f grepfile
Hier ist die Version:
$ grep --v
grep (BSD grep) 2.5.1-FreeBSD
Dies ist eine Maschine (ein rMBP der Version 2012), die mit Apples Software-Updates Schritt hält, also bin ich bei 10.8.4.
Ich habe das GNU überprüftgrep
Aus dem Quellcode kompiliert leidet nicht unter diesem Problem. In der Tat ist es Version 2.14, die eine ganze Reihe von Versionen nach 2.5.1 ist.
Aber wie könnte man die Aufgabe erreichen, eine Eingabe ansonsten gegen eine Reihe von Regexen zu testen, ohne eine äußerst ineffiziente Schleife, die für jeden Regex ein Grep auslöst?
Edit: Der Ansatz, den ich gewählt habe, um dies zu umgehen, war ungefähr so:while read REGEX; do [[ ... =~ $REGEX ]] ... done < regexfile
.
Frage: Ist dies ein bekannter Fehler in dieser Version von grep? Wie können wir unsere Systeme so einrichten, dass sie mit einer Regex-Datei, die grep enthält, ordnungsgemäß funktionieren?
Update: Einige Leute berichten, dass es gut funktioniert (auch mit diesem speziellen FreeBSD 2.5.1 grep). Welche Schritte kann ich unternehmen, um herauszufinden, welche .so / .dylib-Dateien verwendet werden könnten? Kann jemand eineshasum /usr/bin/grep
und sag mir, ob es bei dir funktioniert? (Ich bin mir nicht sicher, ob dies viele Informationen liefern würde, aber ich möchte wissen, ob die Konfiguration meines Computers fehlerhaft ist oder ob es sich um ein aktuelles Problem mit dieser Version der Software handelt.)
$ shasum /usr/bin/grep
eac59389d09642decbb8551e2c975f795934bfbf /usr/bin/grep
Hier gibt es mehr Infos:
$ 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
Weitere Untersuchung:
$ 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)
Ich habe die Maschine auch neu gestartet. Es macht wiederholt das gleiche in gdb.