Quel est le nom correct pour la commande ">"

38

J'essayais de trouver comment passer du texte à un fichier sans écraser ce qu'il y avait déjà en utilisant la >commande et j'ai réalisé que je ne savais pas comment elle s'appelait. Recherche de flèche droite ou chevron droit ou plus de commande n'a pas montré quoi que ce soit. J'ai toujours juste appelé ça passer à .

blarg
la source

Réponses:

53

>n'est pas une commande mais une redirection de descripteur de fichier. Cela signifie que le shell analyse cette affectation, la supprime de la ligne de commande et modifie l'environnement du nouveau processus dans lequel elle est démarrée. Le nouveau processus ne remarque pas cette partie de la ligne de commande. C'est la raison pour laquelle vous pouvez le mettre partout: au début, à la fin ou entre les deux.

Cherchez le REDIRECTIONbloc dans man bash.

Pour ajouter à un fichier existant, vous devez utiliser >>.

Hauke ​​Laging
la source
Si l'option noclobberest définie, alors >|écrasera et autorisera le fichier.
bsd
30

>est un opérateur de redirection . Notez que l'utilisation >de rediriger vers un fichier normal écrasera ce qui existe déjà, à moins que noclobber ne soit défini. >>sera ajouté à la fin du fichier.

Josh Jolly
la source
Et cela n’écrasera pas si noclobbera été défini (bash).
Hauke ​​Laging
Mis à jour ma réponse, merci pour les éclaircissements.
Josh Jolly
5
@HaukeLaging noclobbern'est pas qu'un simple bassisme . Cela fait partie de POSIX
kojiro le
6

Comme d'autres personnes ont répondu, ce >n'est pas une commande, mais plutôt un opérateur de redirection. Toutefois, le terme "opérateur de redirection" ne désigne pas spécifiquement le >, mais plusieurs opérateurs de redirection possibles. La dashpage de manuel répertorie les opérateurs suivants en tant qu’opérateurs de redirection:

 < > >| << >> <& >& <<- <>

Je ne suis pas sûr qu'il y ait un nom individuel valide pour chacun. Peut-être que si vous fouillez quelques vieux manuels de shell, vous trouverez quelque chose d'intéressant. Cette source , correcte ou incorrecte, doit certainement en nommer quelques-unes:

>  - 'output redirection operator'
<  - 'input redirection operator'
>> - 'output append operator'

Mais aussi:

2> - 'standard error redirection operator'

Cependant, je ne pense pas que ce soit vraiment correct car il 2s’agit techniquement d’un argument plutôt que d’une partie de l’opérateur.

Une référence rapide (si vous ne reconnaissez aucun des éléments ci-dessus):

>   - redirect output stream to a file, eg >somefile (for stdout) or 2>somefile
>|  - as above but overwrite the file even if the noclobber shell option is set
>>  - append output stream to file
<   - redirect input stream from file, n defaults to 0 for stdin
<>  - open file for reading and writing on stdin
>&  - redirect output stream to another stream (eg >&1) or close with - (eg 2>&-)
<<  - here document - see http://en.wikipedia.org/wiki/Here_document
<<- - here document with leading tabs removed.

En bashvous avez aussi:

<<< - here string, a one line here file. Eg <<<"foo bar"
Graeme
la source
Très belle liste de références rapides, mais ne <<-supprime- t-elle pas les tabulations et les espaces?
iconoclast
@iconoclast, Nope, définitivement que des onglets.
Graeme
0

> redirige la sortie vers un fichier (ou un appareil) en écrasant tout ce qui existait déjà

>> redirige la sortie vers un fichier (ou un périphérique) en ajoutant à tout ce qui existe déjà

< dirige les données d'un fichier (ou d'un périphérique) vers un programme ou un périphérique

<< un document ici

les
la source
1
<<est un document ici
Graeme
1
@ Graeme j'ai édité ma réponse. Merci pour l'aide
les