Hallo zusammen,
kann mir jemand bzgl. einer bestimmten Aufgabenstellung helfen? Anscheinend habe ich grep noch nicht komplett begriffen.
Ich wollte folgendes tun:
die man-pages von "clamscan" in eine Datei (veränderlich2.txt) schreiben (zur späteren Referenz) und gleichzeitig auf dem Terminal alle Fundstellen anzeigen, die mit "-r" oder"-R" beginnen.
Ich habe fish als default shell.
Dafür verwendete ich folgenden Befehl, welcher aber falsch war:
man clamscan > veränderlich2.txt; and grep -i "-r" veränderlich2.txt # "; and" entspricht "&&" in bash
Hier die verkürzte Ausgabe:
Übereinstimmungen in Binärdatei .local/share/gvfs-metadata/home .local/share/fish/fish_history:- cmd: ls -l /lib/udev/rules.d/ > veränderlich2.txt .local/share/fish/fish_history:- cmd: man byobu > veränderlich2.txt .local/share/fish/fish_history:- cmd: apt list --upgradable> veränderlich2.txt .local/share/fish/fish_history:- cmd: man playonlinux>veränderlich2.txt .local/share/fish/fish_history:- cmd: ubuntu-support-status --show-unsupported > veränderlich2.txt .local/share/fish/fish_history:- cmd: locate gcal > veränderlich2.txt .local/share/fish/fish_history:- cmd: locate okular>> veränderlich2.txt .local/share/fish/fish_history:- cmd: cat /var/log/syslog.1> veränderlich2.txt [...] grep: .cache/dconf: Keine Berechtigung ^C⏎ rosika@rosika-Lenovo-H520e ~> rosika@rosika-Lenovo-H520e ~> echo $status 130
Kann mir jemand erklären, was der Befehl nun genau gemacht hat?
Meine Vermutung ist die:
-r ist ja auch ein Optionsschalter von grep:
-R -r --recursive liest alle Dateien unter jedem Verzeichnis rekursiv.
Da ich den Befehl aus meinem Home-Verzeichnis heraus gestartet habe, nimmt grep dieses als Startpunkt und liest alle Dateien in allen Unterverzeichnissen. Es wird nach dem Kriterium "veränderlich.txt" gesucht, anstatt dies als die Datei, in der er suchen soll, zu nehmen.
In .local/share/fish/fish_history befindet sich meine fish-history, und es werden alle Einträge mit "veränderlich.txt" aufgelistet.
Den Befehl habe ich händisch nach einer Weile gestoppt, da ein Ende nicht gleich abzusehen war; daher Exit-Code 130 (denke ich).
Falls meine Erklärung stimmt, ist mir eins noch nicht klar:
Ich dachte, wenn ich "-r" in Anführungszeichen setze, wird es nicht als Optionsschalter gesehen, sondern als Suchkriterium. Anscheinend falsch.
Den für meine Zwecke richtigen Befehl habe ich dann so gestaltet:
man clamscan > veränderlich2.txt; and grep -i "\-r" veränderlich2.txt -o, --suppress-ok-results -r, --recursive --remove[=yes/no(*)] --max-recursion=#n --max-dir-recursion=#n --max-rechwp3=#n --pcre-recmatch-limit=#n clamscan -r /home clamscan -d /tmp/newclamdb -r /tmp clamscan -r /var/spool/mail rosika@rosika-Lenovo-H520e ~> echo $status 0
So hat´s funktioniert.
Was meint ihr; ist meine Erklärung richtig? Und warum haben die Anführungszeichen nicht wie gewollt funktioniert?
Vielen Dank im voraus.
LG. Rosika ☺