Code: Alles auswählen
# cat .bash_history | grep "apt"
Code: Alles auswählen
# cat .bash_history | grep "apt"
grep: (Standardeingabe): Übereinstimmungen in Binärdatei
BTW: Debian/ sid(uction)
Code: Alles auswählen
# cat .bash_history | grep "apt"
Code: Alles auswählen
# cat .bash_history | grep "apt"
grep: (Standardeingabe): Übereinstimmungen in Binärdatei
Wenn gewisse (Steuer-)Zeichen in einer Datei auftauchen, wird sie als Binärdatei angenommen. Die Manpage ist diesbezüglich eigentlich recht ergiebig.michaa7 hat geschrieben:12.01.2023 18:20:48Stehe ich gerade auf dem Schlauch oder ist grep kaputt?
Code: Alles auswählen
grep apt .bash_history
Ok, verstanden ... "cat .bash_history | grep policy" funktioniert wie gehabt.niemand hat geschrieben:12.01.2023 18:27:23Wenn gewisse (Steuer-)Zeichen in einer Datei auftauchen, wird sie als Binärdatei angenommen.
Das ist dann in der Tat seltsam: der Suchbegriff sollte auf die Einordnung der Eingangsdaten keinen Einfluss haben.michaa7 hat geschrieben:12.01.2023 18:59:12"cat .bash_history | grep policy" funktioniert wie gehabt.
Da stimme ich dir zu. Vielleicht hat sich zwischen den zwei Befehlen die .bash_history veraendert, weil es eine neue Shell mit neuer History ist oder weil die History kurz ist und manche Befehle rausgewandert sind.
So solltest du es machen.niemand hat geschrieben:12.01.2023 19:05:12Mein Versuch zum Testen wäre grep -a 'apt' .bash_history
ok, aber es funktioniert nicht konsistent wie meine Beispiele darlegen. "policy" wird als Wort betrachtet, "apt" nicht als (Such-) wort (sondern als Binärdatei).Meillo hat geschrieben:12.01.2023 19:45:21...
Im Uebrigen ist es kein Fehler `cat' zu verwenden.
...
Dieses Phaenomen hat mit Sicherheit nichts mit der Verwendung von `cat' zu tun.michaa7 hat geschrieben:13.01.2023 00:04:52ok, aber es funktioniert nicht konsistent wie meine Beispiele darlegen. "policy" wird als Wort betrachtet, "apt" nicht als (Such-) wort (sondern als Binärdatei).Meillo hat geschrieben:12.01.2023 19:45:21...
Im Uebrigen ist es kein Fehler `cat' zu verwenden.
...
Code: Alles auswählen
:-Q printf 'a\000b\n' | grep a
Binary file (standard input) matches
:-Q printf 'a\000b\n' >/tmp/a ; grep a /tmp/a
Binary file /tmp/a matches
Das habe ich auch nicht behauptet und es ist nicht meine Meinung.Meillo hat geschrieben:13.01.2023 05:52:02...
Dieses Phaenomen hat mit Sicherheit nichts mit der Verwendung von `cat' zu tun.
...
Ok, danke. Das war ja schon oben erwähnt, aber jetzt habe ich geschnallt wie es gemeint war.Meillo hat geschrieben:13.01.2023 12:22:31...
1) Eine Loesung fuer dein Problem? Dann nutze `grep -a' und die Sache ist erledigt.
...
Seh ich genauso, der aktuelle Befehl zum Lesen aus der .bash_history wird auch zeitgleich in die .bash_history geschrieben, kann funktionieren muss aber nicht...Meillo hat geschrieben: Vielleicht hat sich zwischen den zwei Befehlen die .bash_history veraendert, weil es eine neue Shell mit neuer History ist oder weil die History kurz ist und manche Befehle rausgewandert sind.
Nein, wird er nicht. Der wird erst mit dem Schließen des Terminals geschrieben. Selbst ein "sync" schreibt den nicht.detix hat geschrieben:13.01.2023 17:15:02...
Seh ich genauso, der aktuelle Befehl zum Lesen aus der .bash_history wird auch zeitgleich in die .bash_history geschrieben,...
D.h. alle Einflussfaktoren so weit wie moeglich reduzieren, u.a. dadurch, dass du nicht auf der Datei ~/.bash_history arbeitest, die von anderen Programmen in irgendwelcher Weise veraendert werden kann, sondern auf einer Kopie davon ... deren Inhalt du dann immer weiter kuerzt, bis der Phaenomen verschwindet, dann weisst du welcher Teil der Datei das Phaenomen erzeugt, Diesen isolierst du, bis am Ende eine Datei mir nur noch einer oder ein paar Zeilen uebrig bleibt, die das Phaenomen erzeugt. Dann postest du diese Datei und die Befehle, damit wir das Phaenomen reproduzieren koennen. Auf diesem Weg finden wir den Grund und die Erklaerung fuer das Phaenomen.Meillo hat geschrieben:13.01.2023 12:22:312) Verstehen, *warum* es sich so verhaelt, wie es sich verhaelt? Dann musst du das Phaenomen mit einer moeglichst kleinen Inputdatei reproduzierbar machen.
Ok, könnte auch an meinem Eintrag in der .bashrc liegen:michaa7 hat geschrieben:13.01.2023 17:53:41Nein, wird er nicht. Der wird erst mit dem Schließen des Terminals geschrieben. Selbst ein "sync" schreibt den nicht.detix hat geschrieben:13.01.2023 17:15:02...
Seh ich genauso, der aktuelle Befehl zum Lesen aus der .bash_history wird auch zeitgleich in die .bash_history geschrieben,...
Code: Alles auswählen
# historyfile sofort schreiben, um die zuletzt eingegebenen Befehle zwischen mehreren Konsolen zu teilen
PROMPT_COMMAND="history -a; history -c; history -r"
Will man die Anzahl der Versuche niedrig halten, dann würde man wohl eher immer die Datenmenge halbieren.chrbr hat geschrieben:13.01.2023 18:40:32am einfachsten ist es so:
- Die Datei mit split in viele kleine Abschnitte aufzuteilen und alle mit find und cat + grep zu behandlen. Bei mindestens einem der neuen Bruchstücke sollte dann der Fehler auftreten.
Code: Alles auswählen
cmp ~/bash_history <(strings ~/.bash_history)
Code: Alles auswählen
$ cmp ~/.bash_history <(strings ~/.bash_history)
/home/mh/.bash_history /dev/fd/63 sind verschieden: Byte 2392, Zeile 46
Man könnte Schlussfolgern:michaa7 hat geschrieben:13.01.2023 20:04:43Zu welchen zusätzlichen Erkenntnissen eure Testvorschläge führen sollen ist mir unklar.
ist falsch und Unsinn.michaa7 hat geschrieben:13.01.2023 20:04:43Grep sucht nicht nach "apt" weil es "apt" nicht als Suchmuster interpretiert (wie es das jedoch bei "policy" macht), sondern als Binärdatei (was in diesem Zusammenhang den Suchenden einen XXXX interessiert).
Code: Alles auswählen
cat .bash_history | grep policy
cat .bash_history | grep apt
Code: Alles auswählen
grep: (Standardeingabe): Übereinstimmungen in Binärdatei
Code: Alles auswählen
cat .bash_history
Ok, danke! Jetzt habe ich das erste mal verstanden, dass das von mir beschriebene Verhalten *nicht* das ist was zu erwarten ist sondern auch eurer Meinung nach irgendwie irritierend (woran immer das liegen mag).JTH hat geschrieben:13.01.2023 20:26:02...
Warum sich die Suche bei dir nun für diese vermeintlich ähnlichen Suchen unterscheidet, das wollen dir die verschiedenen Antwortenden suchen helfen.
D.h. eine Datei wurde als binaer eingestuft, wenn der Beginn der Datei binaer aussah.If the first few bytes of a file indicate that the file contains binary data, assume that the file is of type TYPE.
D.h. wenn Null-Bytes enthalten sind, wird die Datei als binaer angesehen, oder -- und hier kommt nun die interessante, neue Regel -- wenn der *Output* im aktuellen Locale nicht korrekt kodiert waere.Non-text bytes indicate binary data; these are either output bytes that are improperly encoded for the current locale, or null input bytes when the -z option is not given.
Code: Alles auswählen
grep -a apt ~/.bash_history | od -c