la manière recommandée est en fait d'utiliser le ./préfixe. C'est le plus portable (cf la FAQ Unix de l'ère Usenet)
Olivier Dulac
find . -name "-filename" | xargs catenverra ./-filename par le canal. Pour votre cas (simplifié?), Une erreur, mais cela pourrait aider dans les grands répertoires / scripts.
Walter A
Réponses:
11
Pour les commandes qui reçoivent une entrée de stdin, vous pouvez utiliser la redirection:
ya celui-ci fonctionne :) est donc j'ai 3 façons de les lire un en utilisant ./ autre en utilisant - et un autre en utilisant <, plus de façons de faire la même chose ??
vidhan
22
Utilisez le double --pour marquer la fin des options:
cat ---<FILENAME>
D' autres programmes tels que touch, rmou git checkoutsuivent également cette convention:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
AVERTISSEMENT: il est recommandé de toujours utiliser --after rmdans les scripts. Un attaquant pourrait placer le --rffichier dans un répertoire et rm *le prendrait comme paramètres d'exécution. Regarde ça:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
Oups, ce n'est pas ce que nous voulions dire, nous ne voulions pas supprimer les répertoires. Nous aurions dû utiliser --:
$ 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
Vous ne pouvez pas compter sur la mise en œuvre de tous les programmes --: beaucoup le font mais pas tous.
glenn jackman
2
Vraiment? Je n'ai pas dit que tous les programmes sont mis en œuvre --, j'ai dit que certains le faisaient .
Arkadiusz Drabczyk
1
@vidhan: je ne connais aucune autre option.
Arkadiusz Drabczyk
1
@vidhan, vous pouvez également compliquer votre vie sans raison et faire quelque chose comme ça, find . -name '-file_name' -exec cat {} \;mais cela ne sert à rien.
./
préfixe. C'est le plus portable (cf la FAQ Unix de l'ère Usenet)find . -name "-filename" | xargs cat
enverra ./-filename par le canal. Pour votre cas (simplifié?), Une erreur, mais cela pourrait aider dans les grands répertoires / scripts.Réponses:
Pour les commandes qui reçoivent une entrée de stdin, vous pouvez utiliser la redirection:
la source
Utilisez le double
--
pour marquer la fin des options:D' autres programmes tels que
touch
,rm
ougit checkout
suivent également cette convention:AVERTISSEMENT: il est recommandé de toujours utiliser
--
afterrm
dans les scripts. Un attaquant pourrait placer le--rf
fichier dans un répertoire etrm *
le prendrait comme paramètres d'exécution. Regarde ça:Oups, ce n'est pas ce que nous voulions dire, nous ne voulions pas supprimer les répertoires. Nous aurions dû utiliser
--
:la source
--
: beaucoup le font mais pas tous.--
, j'ai dit que certains le faisaient .find . -name '-file_name' -exec cat {} \;
mais cela ne sert à rien.-
et rien d'autre? Cela est apparu dans le wargame: overthewire.org/wargames/bandit/bandit2.htmlLes alternatives deviennent étranges:
la source