9

Мне всегда интересно: большинство инструментов 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.

Это просто из любопытства; У меня нет варианта использования для этого.

4 ответа4

11

Чтобы удалить файл с именем -x , используйте rm -- -x (-- означает конец опций) или rm ./-x .

10

Обычно такой тип вопросов задают в интервью. Обычный способ обработки файлов с тире:

$ rm -- -f
$ rm ./-f
6

Общий вопрос в 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .