Narzędzia uniksowe: co, jeśli plik zostanie nazwany minus coś?

9

Zawsze się zastanawiam: większość narzędzi GNU / Unix przyjmuje opcje w postaci „minus coś”, czasami po nich występuje argument. Co jeśli masz plik o nazwie minus coś?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

lub

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

To tylko z ciekawości; Nie mam na to przypadku.


źródło
Musisz znaleźć sposób przekazania dosłownie ciągu „-f” do wywołania systemowego. Normalnie jest to ostrożne uciekanie.
Flexo
2
Do wyborcy „blisko, bo nie na temat”: To jest pytanie o powłokę programowanie i jak uniknąć problemu. To jest całkowicie na temat dla SO. (OTOH, to prawdopodobnie duplikat; problem polega na znalezieniu odpowiedniego innego pytania.)
Jonathan Leffler

Odpowiedzi:

11

Aby usunąć plik o nazwie -x, posługiwać się rm -- -x ( -- oznacza koniec opcji) lub rm ./-x.

Dan D.
źródło
10

Jest dość powszechne zadawanie tego typu pytań w ustawieniach wywiadu. Typowym sposobem obsługi plików za pomocą myślników jest:

$ rm -- -f
$ rm ./-f
William Pursell
źródło
6

Powszechne pytanie w Uniksie. Głównym sposobem jest podanie pełnej nazwy ścieżki do pliku, więc przed nim nie będzie myślnika:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

Trochę polecenia, możesz użyć myślnika samodzielnie (lub podwójnego myślnika), aby zakończyć opcje. Jednak niekoniecznie jest to prawda w przypadku wszystkich poleceń, a nawet tego samego polecenia w różnych systemach.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems
David W.
źródło
4

musisz użyć

  rm -- <filename>

Dawny:

  rm -- -f
sat
źródło
Jakaś uwaga nie byłaby błędna.
user unknown