Rozumiem i akceptuję założenie, że defensywne skrypty powłoki 1 są zarówno ostrożne, jak i, w dłuższej perspektywie, bardziej zrównoważone.
Wiele odpowiedzi na pytania dotyczące przetwarzania tekstu tutaj jest zgodne z tą zasadą, wykorzystując nieprzewidziane odpowiedzi na nazwy plików; które mogą zawierać spacje, myślniki i nowe wiersze.
Jak rozpowszechnione są nowe wiersze w nazwach plików? Konkretnie:
- Czy jakieś aplikacje domyślnie tworzą nazwy plików zawierające znaki nowej linii?
- Czy istnieją sytuacje, w których pożądane byłoby utworzenie takich nazw plików?
- A może są to głównie błędy użytkownika?
[1] Oznacza planowanie i zarządzanie jak najszerszym zakresem scenariuszy i sytuacji awaryjnych ...
Pytanie inspirowane (raczej żałosnym) komentarzem do tego pytania .
shell-script
filenames
newlines
jasonwryan
źródło
źródło
Odpowiedzi:
Nigdy nie widziałem nazwy pliku z nową linią inną niż celowo utworzona do testowania aplikacji, które manipulują nazwami plików. Nazwy plików zawierające znaki nowej linii mogą pojawić się, ponieważ:
POSIX definiuje nazwę pliku jako „nazwę składającą się z 1 do {NAME_MAX} bajtów używanych do nazwania pliku. Znaki składające się na nazwę można wybrać ze zbioru wszystkich wartości znaków oprócz znaku ukośnika i bajtu zerowego. Nazwy plików kropka i kropka-kropka mają szczególne znaczenie.”Nie ma żadnej gwarancji, że każdy system plików będzie akceptować«dziwne»nazwy plików (jedyny gwarantowane znaki to litery ASCII, cyfry, kropka, myślnik i podkreślenia , to znaczy
A-Z
,a-z
,0-9
i._-
, z myślnikiem zabronione na pierwszej pozycji), ale większość rodzimych systemów plików na współczesnych systemach unikowych.źródło
spaces
w nazwach plików nie można zagwarantować przenośności? Przydałoby się wyjaśnienie, że te trzy ostatnie postacie sąperiod, underscore, and hyphen
. Podkreślonym linkiem trudno powiedzieć.,
(używane przez RCS),:
(używane przez X.org),~
(używane przez wiele programów do tworzenia kopii zapasowych plików),… Ale są one obsługiwane przez prawie wszystkie nowoczesne systemy.Pisząc artykuł, często zbieram bibliografię plików PDF z różnych źródeł. Nie wszystkie z nich zawierają prawidłowe metadane, co oznacza, że czasami kopiuję i wklejam tytuł artykułu z przeglądarki PDF do nazwy pliku. Powoduje to często pojawienie się nowego wiersza w nazwie pliku, ale nigdy nie było problemu z żadnym narzędziem, którego użyłem.
IMHO nie ma nic „defensywnego” w kodowaniu do standardu… standardu, który stwierdza, że nowe nazwy są dozwolone w nazwach plików. Jeśli skrypt nie obsługuje wszystkich nazw plików dozwolonych w standardzie, oznacza to, że skrypt jest uszkodzony.
źródło
Nigdy nie widziałem, aby użytkownicy NORMALNI używali nowego wiersza w nazwach plików. Wygląda na to, że ich głównym celem jest (1) ułatwienie atakującym obalenia twojego systemu i (2) utrudnienie pisania bezpiecznych programów :-(. Jednak pozwalają na to nowoczesne systemy uniksowe (takie jak Linux). , więc musisz się na nie przygotować, jeśli chcesz program odporny na atak.
„Nazwy plików i ścieżki w powłoce: Jak to zrobić poprawnie” pokazuje, jak poprawnie to zrobić .
źródło