рекомендуемый способ - использовать ./префикс. Это самый портативный (см. Unix FAQ эры usenet)
Оливье Дюлак
find . -name "-filename" | xargs catотправит ./-filename через канал. В вашем (упрощенном?) Случае ошибка, но она может помочь в больших каталогах / скриптах.
Вальтер
Ответы:
11
Для команд, которые получают ввод от stdin, вы можете использовать перенаправление:
да, это работает :), поэтому у меня есть 3 способа прочитать их, один с помощью ./ другой с помощью - и другой с помощью <, еще способы сделать то же самое ??
Видхан
22
Используйте двойной, --чтобы отметить конец опций:
cat ---<FILENAME>
Другие программы, такие как touch, rmили git checkoutтакже следуют этому соглашению:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
ВНИМАНИЕ: Рекомендуется всегда использовать --после rmв скриптах. Злоумышленник может поместить --rfфайл в каталог и rm *использовать его в качестве параметров запуска. Видеть это:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
К сожалению, это не то, что мы имели в виду, мы не хотели удалять каталоги. Мы должны были использовать --:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm --*
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir
Вы не можете рассчитывать на реализацию каждой программы --: многие делают, но не все.
Гленн Джекман
2
В самом деле? Я не сказал, что все программы реализованы --, я сказал, показал некоторые, которые делают.
Аркадиуш Драбчик
1
@ Видхан: я не знаю ни о каком другом варианте.
Аркадиуш Драбчик
1
@vidhan, вы также можете без всяких причин усложнить свою жизнь и сделать что-то подобное, find . -name '-file_name' -exec cat {} \;но в этом нет особого смысла.
./
префикс. Это самый портативный (см. Unix FAQ эры usenet)find . -name "-filename" | xargs cat
отправит ./-filename через канал. В вашем (упрощенном?) Случае ошибка, но она может помочь в больших каталогах / скриптах.Ответы:
Для команд, которые получают ввод от stdin, вы можете использовать перенаправление:
источник
Используйте двойной,
--
чтобы отметить конец опций:Другие программы, такие как
touch
,rm
илиgit checkout
также следуют этому соглашению:ВНИМАНИЕ: Рекомендуется всегда использовать
--
послеrm
в скриптах. Злоумышленник может поместить--rf
файл в каталог иrm *
использовать его в качестве параметров запуска. Видеть это:К сожалению, это не то, что мы имели в виду, мы не хотели удалять каталоги. Мы должны были использовать
--
:источник
--
: многие делают, но не все.--
, я сказал, показал некоторые, которые делают.find . -name '-file_name' -exec cat {} \;
но в этом нет особого смысла.-
и ничего больше? Это появилось в wargame: overthewire.org/wargames/bandit/bandit2.htmlАльтернативы становятся странными:
источник