Beachten Sie, dass diese alle versuchen, den Parameter für bash zu umgehen. Da es das gleiche ist, das als nicht escaped ausgegeben wird, senden alle diese außer dem dritten nur den String "-p" an mkdir, der ihn als Option parst. Das Parsing von Optionen wird nicht in bash durchgeführt, daher ist jede Möglichkeit, dies zu umgehen (beschrieben in den Antworten unten), ein Merkmal von mkdir (oder besser gesagt, ein Mangel an Fehlern).
Score_Under
11
Ich muss fragen, warum Sie ein solches Verzeichnis wollen. Es wäre eine PITA zu benutzen.
Daniel R Hicks
3
@DanielRHicks: Ich habe diesen Ordner versehentlich erstellt, weiß aber nicht, wie ich ihn löschen soll.
Jichao
4
Sollte die Frage dann nicht lauten "Wie lösche ich ein Verzeichnis mit dem Namen '-p' unter Linux mit Bash"?
Chepner
@chepner: Weil sie eigentlich die gleichen Probleme sind. Ich habe versucht, das Verzeichnis mit zu löschen, bin rmdirjedoch mit denselben Fehlern fehlgeschlagen.
Jichao
Antworten:
40
Die meisten Dienstprogramme (mit Ausnahme von testund alle POSIX-kompatiblen echo) unterstützen die Option "Ende der Optionen"-- , sodass Sie Folgendes ausführen können:
mkdir ---p
Dies ist besonders nützlich, wenn Sie Dateien umbenennen oder entfernen, die möglicherweise mit einem Bindestrich beginnen. In Skripten sollten Sie immer verwenden
mv --"$filename"
anstelle eines einfachen mv "$filename"oder noch schlimmer eines nicht zitierten Dateinamens.
rmdir
jedoch mit denselben Fehlern fehlgeschlagen.Antworten:
Die meisten Dienstprogramme (mit Ausnahme von
test
und alle POSIX-kompatiblenecho
) unterstützen die Option "Ende der Optionen"--
, sodass Sie Folgendes ausführen können:Dies ist besonders nützlich, wenn Sie Dateien umbenennen oder entfernen, die möglicherweise mit einem Bindestrich beginnen. In Skripten sollten Sie immer verwenden
anstelle eines einfachen
mv "$filename"
oder noch schlimmer eines nicht zitierten Dateinamens.quelle
mkdir ./-p
Denken Sie daran, dass die meisten anderen Programme denselben "Trick" verwenden müssten.
quelle