Je suis tombé sur une commande qui vient d'être donnée ci-dessous -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
D'après ce que je peux deviner, il est probablement utilisé pour valider les modifications dans .bash_profile, mais à quoi sert-il exactement?
command-line
bash
terminal
.bash-profile
monstre
la source
la source
man bash
est écrit avec un langage assez formel, il peut être difficile à comprendre. D'un autre côté, l'expressionbash >>
renvoie peu de liens utiles dans Google. Il est vrai que nous voulons agréger les connaissances sans compter sur Google; pour cette raison, même une question avec une réponse facilement consultable peut convenir. Cependant, le fait que vous n'ayez pas fourni la réponse tout de suite (voir Puis-je répondre à ma propre question? ) Ni indiqué les ressources existantes (que vous pourriez avoir besoin d'aide pour comprendre) indique un manque de recherche.Réponses:
Il redirige la sortie standard du programme avant
>>
et l'ajoute au fichier donné après.la source
>> file command
echo a b >> c d
s'ajouteraita b d
à un fichier nomméc
.Réponse courte - que fait
>>
-on?Avec
>>
, vous ajoutez la sortie d'une commande à un fichier.Votre exemple de commande se compose de plusieurs parties, essentiellement:
Ainsi, la sortie de
command
serait ajoutée àfilename
.Que se passe-t-il dans le cas spécifique de
echo
?Dans votre cas spécifique, la
echo "…"
commande envoie ses arguments d'entrée à «stdout», qui est ce que l'on appelle le «descripteur de sortie standard». Les arguments d'entrée àecho
sont suivis d'un saut de ligne (\n
), de sorte que vous obtenez un saut de ligne.Ici, un «descripteur de sortie standard» n'est rien de plus qu'un flux de sortie affiché dans votre shell lorsque vous exécutez une commande. (Autrement dit, lorsque vous tapez
echo foo
et appuyez sur Entrée,foo\n
c'est la sortie réelle de laecho
commande, qui est affichée par votre shell,foo
suivie d'une nouvelle ligne.)Fondamentalement, tout ce qui écrit sur votre ligne de commande utilise stdout. Il existe également un autre descripteur appelé «stderr» qui est généralement utilisé pour les messages d'erreur. Il sera également imprimé comme stdout, donc parfois ils pourraient être intercalés. Et il y a un descripteur stdin qui est utilisé pour l'entrée. Consultez cet article pour plus d'informations.
Comment redirigez-vous la sortie dans le shell?
Vous pouvez toujours rediriger stdout vers un descripteur de fichier, ce que vous pouvez faire avec l'un de ces opérateurs:
>
redirige vers un descripteur de fichier. Il crée le fichier s'il n'existe pas ou, s'il existe déjà, tronque le fichier avant l'écriture. Le fichier sera donc écrasé par stdout.>>
ajoute à un descripteur de fichier. Il crée le fichier s'il n'existe pas.Vous pouvez également rediriger stderr en utilisant
2>
ou2>>
de manière similaire. Ou vous pouvez combiner stderr et stdout en un seul fichier:2>&1
fait cela. Pour plus d'informations sur la redirection et quelques exemples supplémentaires, vous pouvez lire ce petit tutoriel .Comment puis-je comprendre ce que signifie un morceau particulier de code shell?
Généralement, vous voudrez peut-être essayer expliquehell.com , qui vous donnera des conseils visuels et des informations sur une commande shell particulière.
la source
Pour les TLDR qui aiment juste voir un exemple;
La sortie standard (pas les erreurs) de la commande avant le >> sera ajoutée à la fin du fichier qui porte son nom.
Donc, si le fichier "flintstones.txt" contient;
echo Dino >> flintstones.txt
entraînera l'ajout de «Dino» à la fin du fichier;la source
echo Dino > flintstones.txt
pour montrer le contenu de celui-ci serait simplementDino
s'il est fait avec une seule flèche droite.Encore une fois, si vous le faites
Tout le contenu du fichier sera effacé.
la source
> file
efface le fichier mais>> file
ne fait rien.