Я всегда задаюсь вопросом: большинство инструментов GNU/Unix принимают опции в форме "минус что-то", иногда за которыми следует аргумент. Что, если у вас есть файл с именем минус что-то?
$ 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.
или
$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.
Это просто из любопытства; у меня нет примера использования этого.
решение1
Чтобы удалить файл с именем -x
, используйте rm -- -x
( --
означает конец параметров) или rm ./-x
.
решение2
Довольно часто задают этот тип вопросов в интервью. Обычный способ обработки файлов с тире:
$ rm -- -f
$ rm ./-f
решение3
Распространенный вопрос в Unix. Основной способ — указать полный путь к файлу, чтобы не было тире перед ним:
$ rm -file.txt
unknown option -l
$ rm ./-file.txt #No problem!
$ rm $PWD/-file.txt #Same thing
Некоторыйкоманды, вы можете использовать тире само по себе (или двойное тире) для завершения опций. Однако это не обязательно верно для всех команд или даже для одной и той же команды в разных системах.
$ rm -- -file.txt #Works on Linux but not on some Unix systems
решение4
вам нужно использовать
rm -- <filename>
Бывший:
rm -- -f