la forma recomendada es usar ./prefijo. Es el más portátil (consulte las preguntas frecuentes sobre Unix de la era de Usenet)
Olivier Dulac
find . -name "-filename" | xargs catenviará ./-filename a través de la tubería. Para su caso (¿simplificado?) Un error, pero podría ayudar en directorios / scripts grandes.
Walter A
Respuestas:
11
Para los comandos que obtienen información de stdin, puede usar la redirección:
ya que este funciona :) es así que obtuve 3 formas de leerlos uno usando ./ otro usando - y otro usando <, ¿hay más formas de hacer lo mismo?
vidhan
22
Use doble --para marcar el final de las opciones:
cat ---<FILENAME>
Otros programas como touch, rmo git checkouttambién siguen esta convención:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
ADVERTENCIA: es una buena práctica usar siempre --después rmen scripts. Un atacante podría colocar el --rfarchivo en un directorio y rm *tomarlo como parámetros de ejecución. Mira esto:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
Vaya, esto no es lo que queríamos decir, no queríamos eliminar directorios. Deberíamos haber usado --:
$ 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
./
prefijo. Es el más portátil (consulte las preguntas frecuentes sobre Unix de la era de Usenet)find . -name "-filename" | xargs cat
enviará ./-filename a través de la tubería. Para su caso (¿simplificado?) Un error, pero podría ayudar en directorios / scripts grandes.Respuestas:
Para los comandos que obtienen información de stdin, puede usar la redirección:
fuente
Use doble
--
para marcar el final de las opciones:Otros programas como
touch
,rm
ogit checkout
también siguen esta convención:ADVERTENCIA: es una buena práctica usar siempre
--
despuésrm
en scripts. Un atacante podría colocar el--rf
archivo en un directorio yrm *
tomarlo como parámetros de ejecución. Mira esto:Vaya, esto no es lo que queríamos decir, no queríamos eliminar directorios. Deberíamos haber usado
--
:fuente
--
: muchos lo hacen pero no todos.--
, dije que mostraban algunos que sí.find . -name '-file_name' -exec cat {} \;
pero realmente no tiene mucho sentido.-
y nada más? Esto surgió en el juego de guerra: overthewire.org/wargames/bandit/bandit2.htmlLas alternativas se vuelven raras:
fuente