Инструменты Unix: что, если файл называется минус что-то?


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.

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


Вы должны найти способ передачи буквально строки "-f" системному вызову. Обычно это путем осторожного побега.
Флекс

2
Избирателю «закрыть, потому что не по теме»: это вопрос о программировании оболочки и о том, как избежать проблемы. Это полностью по теме для SO. (OTOH, это, вероятно, дубликат; проблема в том, чтобы найти соответствующий другой вопрос.)
Джонатан Леффлер

Ответы:


12

Чтобы удалить файл с именем -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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.