Ich verstehe und akzeptiere die Prämisse, dass defensives 1- Shell-Scripting umsichtig und langfristig nachhaltiger ist.
Viele der hier gestellten Antworten auf Textverarbeitungsfragen folgen diesem Prinzip, indem sie die Antwortmöglichkeiten für unorthodoxe Dateinamen berücksichtigen. Das kann Leerzeichen, Bindestriche und neue Zeilen enthalten.
Wie häufig sind neue Zeilen in Dateinamen? Speziell:
- Erstellen Anwendungen standardmäßig Dateinamen mit Zeilenumbrüchen?
- Gibt es Situationen, in denen es wünschenswert wäre, solche Dateinamen zu erstellen?
- Oder handelt es sich überwiegend um einen Benutzerfehler?
[1] Das heißt, eine möglichst breite Palette von Szenarien und Eventualitäten planen und verwalten ...
Frage inspiriert durch den (eher klagenden) Kommentar zu dieser Frage .
shell-script
filenames
newlines
jasonwryan
quelle
quelle
Antworten:
Ich habe noch nie einen Dateinamen mit einem anderen Zeilenumbruch als dem gesehen, der absichtlich erstellt wurde, um Anwendungen zu testen, die Dateinamen manipulieren. Dateinamen mit Zeilenumbrüchen können auftreten, weil:
POSIX definiert einen Dateinamen als „einen Namen, der aus 1 bis {NAME_MAX} Bytes besteht und zum Benennen einer Datei verwendet wird. Die Zeichen, aus denen der Name besteht, können aus dem Satz aller Zeichenwerte mit Ausnahme des Schrägstrichs und des Nullbytes ausgewählt werden. Die Dateinamen Punkt und Punkt-Punkt besondere Bedeutung haben.“Es gibt keine Garantie, dass jedes Dateisystem akzeptieren‚fremde‘Dateinamen (die nur garantiert Zeichen sind ASCII - Buchstaben, Ziffern, Periode, Bindestrich und Unterstrich , dh
A-Z
,a-z
,0-9
und._-
, mit Bindestrich in der ersten Position verboten), aber die meisten nativen Dateisysteme auf modernen Unices tun dies.quelle
spaces
in Dateinamen sind nicht garantiert portabel? Es wäre hilfreich, wenn Sie klarstellen würden, dass es sich um die letzten drei Zeichen handeltperiod, underscore, and hyphen
. Mit dem unterstrichenen Link ist es schwer zu sagen.,
(von RCS verwendet),:
(von X.org verwendet),~
(von vielen Programmen für Sicherungsdateien verwendet),… Aber sie werden von fast allen modernen Systemen unterstützt.Beim Schreiben einer Arbeit sammle ich oft eine Bibliographie von PDF-Dateien aus verschiedenen Quellen. Nicht alle enthalten die richtigen Metadaten. Das bedeutet, dass ich manchmal den Titel des Papiers aus dem PDF-Viewer in den Dateinamen kopiere. Dies führt häufig zu Zeilenumbrüchen innerhalb des Dateinamens, war jedoch noch nie ein Problem mit den von mir verwendeten Tools.
IMHO gibt es nichts "defensives" an der Codierung nach einem Standard. Ein Standard, der besagt, dass Zeilenumbrüche in Dateinamen erlaubt sind. Wenn Ihr Skript nicht alle im Standard zulässigen Dateinamen verarbeitet, ist Ihr Skript fehlerhaft.
quelle
Ich habe noch nie gesehen, dass NORMALE Benutzer Zeilenumbrüche in Dateinamen verwenden. Es scheint, dass ihr Hauptzweck darin besteht, (1) Angreifern das Untergraben Ihres Systems zu erleichtern und (2) das Schreiben sicherer Programme zu erschweren :-(. Moderne Unix-Systeme (wie Linux) erlauben dies jedoch Sie müssen sich also darauf vorbereiten, wenn Sie ein Programm wollen, das Angriffen widersteht.
"Dateinamen und Pfadnamen in der Shell: So machen Sie es richtig" zeigt, wie Sie damit richtig umgehen.
quelle