examiner comment le shell traite chaque partie de la commande comme il analyse le:
cat file1 > file2 >file3
cat file1
: préparer un nouveau processus avec l'image du programme cat
avec l'argument file1
. (Donné 1 ou plusieurs arguments, cat
lira des extraits de chaque argument en tant que fichier et écrire à son descripteur de fichier de sortie)
> file2
: modifier le nouveau descripteur de fichier de sortie de processus pour écrire file2
au lieu de l'évier de la sortie courant (initialement console pour un shell interactif) - créez `file2 si nécessaire.
> file3
: modifier le nouveau descripteur de fichier de sortie de processus pour écrire file3
au lieu de l'évier de la sortie de courant (était file2
) - créer file3
si nécessaire
End of command
: Spawn le nouveau processus
Ainsi, dans le fin, file2
est créé, mais inutilisé. file3
obtient les données.
cat > file1 > file2 > file3
cat
: préparer un nouveau processus avec le programme/image cat
sans argument.(aucun argument, cat
lira son descripteur de fichier d'entrée et écrira dans son descripteur de fichier de sortie)
> file1
: change le descripteur de fichier de sortie du nouveau processus pour écrire à file1
au lieu du récepteur de sortie courant (initialement la console pour un shell interactif) - créez file1
si nécessaire.
> file2
: modifiez le descripteur de fichier de sortie du nouveau processus pour écrire à file2
au lieu du récepteur de sortie courant (était file1
) - créez file2
si nécessaire.
> file3
: modifier le nouveau descripteur de fichier de sortie de processus pour écrire file3
au lieu de l'évier de sortie courant - (était file2
) créer file3
si nécessaire
End of command
: Spawn le nouveau processus
Ainsi, dans le fin, file1
et file2
sont créés, mais inutilisés. file3
obtient les données. cat
attend une entrée sur son périphérique d'entrée (le périphérique de console par défaut pour un shell interactif). Toute entrée que reçoit cat
ira à son périphérique de sortie (qui finit par être file3
au moment où le shell a fini de traiter la commande et a appelé cat
).
cat > file1 > file2 < file3
cat
: préparer un nouveau processus avec le programme/image cat
sans argument. (aucun argument, cat
lira son descripteur de fichier d'entrée et écrira dans son descripteur de fichier de sortie)
> file1
: change le descripteur de fichier de sortie du nouveau processus pour écrire à file1
au lieu du récepteur de sortie courant (initialement la console pour un shell interactif) - créez file1
si nécessaire.
> file2
: modifiez le descripteur de fichier de sortie du nouveau processus pour écrire à file2
au lieu du récepteur de sortie courant (était file1
) - créez file2
si nécessaire.
< file3
: modifier le nouveau descripteur de fichier entrée de processus pour lire à partir file3
au lieu de la source d'entrée (d'abord la console pour un shell interactif)
End of command
: Spawn le nouveau processus
Ainsi, dans le fin, file1
est créé, mais inutilisé. file2
obtient les données. cat
attend l'entrée sur son périphérique d'entrée (qui a été défini sur file3
au moment où le shell a terminé le traitement de la commande et appelé cat
). Toute entrée que reçoit cat
ira à son périphérique de sortie (qui finit par être file2
au moment où le shell a fini de traiter la commande et a appelé cat
).
-
Notez que dans le premier exemple, cat
est celui qui traite/ouvre file1
. Le shell a simplement passé le mot file1
au programme en tant qu'argument. Cependant, le shell a ouvert/créé file2
et file3
.cat
ne savait rien à propos de file3
et n'a aucune idée de l'endroit où les choses qu'il écrivait à sa sortie standard allait.
Dans les 2 autres exemples, le shell a ouvert tous les fichiers. cat
ne savait rien sur les fichiers. cat
n'avait aucune idée d'où provenait son entrée standard et où se dirigeait sa sortie standard.
par @Sorpigal commentaire - le BASH manual a quelques bonnes descriptions de ce que les différents opérateurs de redirection font. Une grande partie est la même à travers différents obus Unix à des degrés divers, mais consultez votre manuel shell/manpage spécifique pour confirmer. Merci @Sorpigal.
http://gnu.org/software/bash/manual/html_node/Redirections.html
Étant donné que cette syntaxe est en grande partie non valide, il est difficile d'expliquer. Vous devriez seulement utiliser un opérateur '>' ou '<'. L'utilisation de deux est une erreur, ce qui rend difficile à expliquer. Avez-vous lu «homme bash» pour lire sur la coquille? Avez-vous essayé de lire l'un des milliers de didacticiels 'bash' et' shell' disponibles? S'il vous plaît (1) lire un tutoriel shell et puis (2) mettre à jour votre question en fonction de ce que vous avez appris. Voici le premier hit google: http://gd.tuwien.ac.at/linuxcommand.org/lts0060.html. Commencer ici. –
Opérateurs de redirection < > >><<< > & ... http://www.gnu.org/software/bash/manual/html_node/Redirections.html –