Інструменти 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" до системного виклику. Зазвичай, це ретельне уникнення.
Flexo

2
До "закрити, тому що не по темі" виборця: Це питання про оболонку програмування і як уникнути проблеми. Це повністю на тему для SO. (OTOH, це, мабуть, дублікат; проблема полягає в пошуку відповідного іншого питання.)
Jonathan Leffler

Відповіді:


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

Деяке зауваження не буде неправильним.
user unknown
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.