a maneira recomendada é realmente usar o ./prefixo. É o mais portátil (cf da época usenet Unix FAQ)
Olivier Dulac
find . -name "-filename" | xargs catenviará ./-filename através do canal. Para o seu caso (simplificado?), Um erro, mas pode ajudar em grandes diretórios / scripts.
Walter A
Respostas:
11
Para comandos que obtêm entrada do stdin, você pode usar o redirecionamento:
ya este funciona :) é assim que eu tenho 3 maneiras de lê-los um usando ./ outro usando - e outro usando <, mais maneiras de fazer a mesma coisa?
Vidhan
22
Use double --para marcar o final das opções:
cat ---<FILENAME>
Outros programas como touch, rmou git checkouttambém seguem esta convenção:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
AVISO: É uma boa prática sempre usar --depois rmnos scripts. Um invasor pode colocar o --rfarquivo em um diretório e rm *considerá-lo como parâmetros de execução. Veja isso:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
Opa, isso não é o que queremos dizer, não queremos remover diretórios. Deveríamos ter 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
Você não pode contar com a implementação de todos os programas --: muitos fazem, mas não todos.
precisa
2
Verdade? Eu não disse que todos os programas implementam --, eu disse que mostra alguns que o fazem.
precisa saber é o seguinte
1
@vidhan: não conheço nenhuma outra opção.
Arkadiusz Drabczyk 10/03
1
@vidhan, você também pode complicar sua vida sem motivo e fazer algo assim, find . -name '-file_name' -exec cat {} \;mas realmente não há muito sentido nisso.
./
prefixo. É o mais portátil (cf da época usenet Unix FAQ)find . -name "-filename" | xargs cat
enviará ./-filename através do canal. Para o seu caso (simplificado?), Um erro, mas pode ajudar em grandes diretórios / scripts.Respostas:
Para comandos que obtêm entrada do stdin, você pode usar o redirecionamento:
fonte
Use double
--
para marcar o final das opções:Outros programas como
touch
,rm
ougit checkout
também seguem esta convenção:AVISO: É uma boa prática sempre usar
--
depoisrm
nos scripts. Um invasor pode colocar o--rf
arquivo em um diretório erm *
considerá-lo como parâmetros de execução. Veja isso:Opa, isso não é o que queremos dizer, não queremos remover diretórios. Deveríamos ter usado
--
:fonte
--
: muitos fazem, mas não todos.--
, eu disse que mostra alguns que o fazem.find . -name '-file_name' -exec cat {} \;
mas realmente não há muito sentido nisso.-
e nada mais? Isso veio à tona no jogo de guerra: overthewire.org/wargames/bandit/bandit2.htmlAs alternativas se tornam estranhas:
fonte