Я хочу использовать touch
команду в терминале Linux, чтобы создать файл с именем, начинающимся с символа -
, скажем -attempt
, .
Как мне преодолеть тот факт, что -
это особенный персонаж?
Например, если бы я хотел создать файл с именем #attempt
, я бы не мог просто написатьtouch #attempt
Вместо этого мне пришлось бы написать touch \#attempt
, но в этом -
случае даже если я \
его использую, он все равно не работает должным образом).
решение1
Два пути:
Переместите -
от первого символа
touch ./-foo
Или используйте --
маркер конца переключателей
touch -- -foo
решение2
touch \#attempt
работает, потому что знак решетки является специальным для оболочки. Аналогично, вам понадобится что-то вроде touch \(foo\)
, или touch 'this & that'
для имен файлов с круглыми скобками или амперсандом и т. д.
Но выход из тире не поможет, так как он не является чем-то особенным.к оболочке, а к утилите, запущенной оболочкой. Запуск командной строки оболочки touch \-foo
— это то же самое, что и запуск touch -foo
, в любом случае touch
получит единственный аргумент -foo
.
Поэтому вместо побега требуется что-то другое.
Стандартный способ указать программе прекратить интерпретировать аргументы команды как (возможные) опции — вставить аргумент --
после опций. Например, это будет работать rm
с опцией -f
, для файла с именем -r
:
rm -f -- -r
(и rm -- --
удалит файл с именем --
.)
В качестве альтернативы вы можете обойти эту проблему, убедившись, что дефис не является первым символом имени файла, обычно добавляя ./
. Итак, еще раз, это удалит файл с именем -rf
:
rm ./-rf