rm -- --somefile
Während das funktioniert, dann ist es eine Lösung, die für die Analyse seiner Optionen auf rm
mit getopts beruht. Es gibt Anwendungen, die ihr eigenes Parsing durchführen und das auch kotzen werden (weil sie nicht notwendigerweise die Logik " bedeutet Ende der Optionen" implementieren).
Diesem Grund, die Lösung, die Sie durch den Schädel fahren sollte, ist dieses:
rm ./--somefile
Es wird immer funktionieren, da auf diese Weise Ihre Argumente nie mit einem -
beginnen.
Darüber hinaus, wenn Sie versuchen, wirklich anständige Shell-Skripte zu machen; Sie sollten technisch ./
vor all Ihren Dateinamenerweiterungen setzen, um zu verhindern, dass Ihre Skripte aufgrund der unkonventionellen Dateinameneingabe zerbrechen (oder um zu verhindern, dass sie missbraucht/missbraucht werden, um Dinge zu tun, die sie nicht tun sollten): zum Beispiel rm
wird Löschen Sie Dateien, aber überspringen Sie Verzeichnisse, während rm -rf *
alles löschen. Übergeben Sie einen Dateinamen von "-rf
" an ein Skript oder jemanden touch ~victim/-rf
'könnte auf diese Weise verwendet werden, um sein Verhalten mit wirklich schlimmen Folgen zu ändern).
Identisch mit [serverfault] (https://serverfault.com/questions/47003/deleting-a-unix-directory-with-a-hyphen-in-the-name) und [unix] (https: // unix.stackexchange.com/questions/1519/how-do-i-delete-a-file-whose-name-beginnt-with-hyphen-aka-dash-or-minus). – Dorian
@Dorian Nun gut, aber ich war zuerst :) – cb0