J'ai entendu parler de "l'utilisation inutile de chat" et j'ai trouvé quelques suggestions, mais ce qui suit ne produit rien dans mon shell bash.
< filename
Cependant, l'utilisation de cat fonctionne comme prévu.
cat filename
J'utilise Fedora Core 18 et GNU bash, version 4.2.45 (1).
EDIT: L'utiliser devant un tuyau ne fonctionne pas non plus.
< filename | grep pattern
Alors que l'utilisation de chat fonctionne comme prévu.
cat filename | grep pattern
EDIT2: Pour clarifier, je sais que je peux utiliser cette
grep pattern < filename
mais j'ai lu ici /programming/11710552/useless-use-of-cat que je peux également l'utiliser devant la commande. Cependant, cela ne fonctionne pas devant la commande.
bash
shell
io-redirection
cat
punaise
la source
la source
Réponses:
Le symbole inférieur à et (
<
) ouvre le fichier et le joint au descripteur de périphérique d'entrée standard d'une application / d'un programme. Mais vous n'avez donné au shell aucune application à laquelle attacher l'entrée.Exemple
Ces 2 exemples font essentiellement la même chose mais obtiennent leur contribution de 2 manières légèrement différentes.
ouvre le fichier
ouvre STDIN
Furtivement derrière le rideau
Vous pouvez utiliser
strace
pour voir ce qui se passe.Quand on lit un fichier
Lorsque nous lisons dans STDIN (identifié comme 0)
Dans le premier exemple, nous pouvons voir que
cat
le fichier a été ouvert et lu à partir de celui-ciblah.txt
,. Dans la seconde, nous pouvons voir quecat
lit le contenu du fichierblah.txt
via le descripteur de fichier STDIN, identifié comme le descripteur numéro 0.la source
cat
est généralement mal compris et utilisé lorsqu'il n'est pas nécessaire.< filename command
.L'utilisation inutile classique de
cat
est lorsque vous l'utilisez pour donner une entrée à des programmes qui sont parfaitement capables d'ouvrir des fichiers directement. Par exemple:Mal
Bien
Aussi bon (le
<file
peut être de chaque côté de la commande)la source
cat
.cat
include (1)cat file
(avec sortie vers l'écran / le terminal; bien que, si le fichier est plus long que l'écran est haut, vous préférerez peut-être utilisermore
ouless
ou quelque chose comme ça), (2)cat file1 file2 file3 > all_data
( exactement à quoi celacat
sert), (3)cat f1 f2 f3 | tr …
(ou dirigez-vous vers tout autre programme auquel vous ne voulez pas transmettre directement les fichiers; par exemple,wc
(par exemple, si vous voulez voir le grand total uniquement) ougrep
(par exemple, si vous avez une ancienne version qui ne prend pas en charge-h
, c.-à-d.--no-filename
)),… (suite)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//'
, (5)sudo cat file600 | untrusted_program
(c'est-à-dire que vous (votre UID) ne pouvez pas lire le fichier, et vous ne voulez pas exécuter le programme en tant que root ou même n'importe quel UID semi-privilégié). Aussi, ( e ) (c'est-à-dire un nombre entre 2 et 3)program_that_generates_html | cat static_html_header - static_html_footer
(que vous voudriez probablement rediriger vers un fichier ou un canal).L'UUOC est en:
ou
Là,
some-cmd
est la lecture du contenu desomefile
partir d' un tuyau qui est alimenté parcat
qui se lit à partirsomefile
.some-cmd
peut lire directement depuissomefile
(après que le shell l'ait ouvert sur stdin), il n'est pas nécessaire decat
:ou
(les redirections peuvent apparaître n'importe où sur une simple ligne de commande).
la source