Ausgabeumleitung und Leerzeichen

9

Ich bin darüber paranoid, aber hoffentlich ist es eine einfache Frage:

Gibt es einen Unterschied zwischen

cat file1 | egrep -oP "[Mm]y string" > /home/user/file.txt

und

cat file1|egrep -oP "[Mm]y string">/home/user/file.txt

Ist es also wichtig, ob Leerzeichen die Pipe- (|) und Umleitungszeichen (>) auffüllen? Ich bin wirklich paranoid, dass Leerzeichen dort irgendwie in der Ausgabedatei landen, wenn ich das nicht will. Kann jemand klarstellen? (Verwenden Sie Ubuntu 12 / bash, wenn das wichtig ist.)

Magnus
quelle
Die einzigen Unterschiede sind a) kosmetische und b) Bequemlichkeit beim Bearbeiten von Befehlszeilen in Bash - z. B. wird ein "Wort" durch Leerzeichen begrenzt, sodass ohne Leerzeichen |oder durch >Eingabe Ctrl-Wzum Löschen des vorherigen "Wortes" mehr gelöscht wird, als Sie wahrscheinlich wollten. dito für Cursor-Bewegung Tastatureingaben wie Esc-fund Esc-busw.
cas

Antworten:

8

In der Shell-Befehlszeile dienen nicht zitierte Leerzeichen nur dazu, Wörter während der Befehlsanalyse abzugrenzen. Sie werden weder in den Argumenten, die der Befehl sieht, noch im Standardeingabestream weitergegeben.

jw013
quelle
Sind Sie sicher, dass es keine Sicherheitslücke bei der Verwendung eines Leerzeichens nach den Operatoren gibt? Es fällt mir jetzt schwer, es zu reproduzieren, aber es gibt einen häufigen Exploit, bei dem ein böswilliger Benutzer den beabsichtigten Vorgang ändern kann, indem er eine Datei wie "Dateiname" verwendet, wenn die beabsichtigte Datei "Dateiname" war.
CrippledTable