#1 Le 22/10/2015, à 23:32
- niemand
[RESOLU] Blocage dans le terminal opérateur <<
Bonsoir,
J'ai fais la commande suivante pour consulter le fichier test.txt et ensuite réécrire par dessus :
cat << test.txt
Cette commande fait bien le boulot ?
cat << test.txt
> j ecrit cela dans le terminal
> je viens de faire return
> et encore une fois
Comment je fait pour sortir de ce "mode", je ne fait que écrire dans le terminal ?
Merci pour votre aide.
Dernière modification par niemand (Le 23/10/2015, à 21:26)
Hors ligne
#2 Le 23/10/2015, à 06:03
- pingouinux
Re : [RESOLU] Blocage dans le terminal opérateur <<
Bonjour,
Si tu veux consulter le fichier
cat test.txt
Si tu veux ajouter à ce fichier du texte entré dans le terminal
cat >>test.txt
Taper Ctrl+D pour terminer l'insertion.
Autre méthode
cat <<EOF >>test.txt
Taper EOF (seul sur la ligne), pour terminer l'insertion.
Pour consulter et modifier le fichier, utiliser un éditeur (vim, nano...)
Hors ligne
#3 Le 23/10/2015, à 10:08
- niemand
Re : [RESOLU] Blocage dans le terminal opérateur <<
Salut pingouinux,
Tout marche nickel + les différentes méthodes je suis aux anges mais je ne comprends pas ce que je faits.
Je ne comprends pas la commande ci dessous :
cat << EOF >> test.txt
J'ai fait le test et je ne suis pas obligé de mettre EOL je peux mettre n'importe quoi, c'est juste un moyen de sortir en faite.
Une dernière question sur les redirections :
Si je faits la chose suivante
cat > test.txt
> alh
Ctrl+D
et que ensuite je faits la commande:
ls < test.txt
Je pensais avoir la même chose que la commande ls -alh ?
Mais ce n'est pas ce que j'obtiens en faite c'est comme si je tapais juste la commande ls comme résultat.
Dernière modification par niemand (Le 23/10/2015, à 10:11)
Hors ligne
#4 Le 23/10/2015, à 10:28
- pingouinux
Re : [RESOLU] Blocage dans le terminal opérateur <<
J'ai fait le test et je ne suis pas obligé de mettre EOL je peux mettre n'importe quoi, c'est juste un moyen de sortir en faite.
Oui, tu peux mettre ce que tu veux.
ls < test.txt
Je pensais avoir la même chose que la commande ls -alh ?
Mais ce n'est pas ce que j'obtiens en faite c'est comme si je tapais juste la commande ls comme résultat.
Tu déclares test.txt comme entrée standard de ls, qui ne la lit pas. Ça ne sert donc à rien.
En revanche, les commandes suivantes donnent le même résultat :
cat test.txt # On donne le nom du fichier
cat <test.txt # On déclare test.txt comme entrée standard de cat
Ajouté :
Avec ce que tu as mis dans test.txt en #3, pour avoir l'équivalent de ls -alh
ls -$(< test.txt)
Dernière modification par pingouinux (Le 23/10/2015, à 10:35)
Hors ligne
#5 Le 23/10/2015, à 10:34
- ar barzh paour
Re : [RESOLU] Blocage dans le terminal opérateur <<
grillé par pingouinux ....
suite à la remarque de MicP #8 je remplace EOF par FIN
dans un terminal tape
cat <<EOF
cat <<FIN
le terminal se met en attente d'une réponse ...
jusqu'à ce que tu lui donnes comme réponse FIN
quand tu auras tapé EOF FIN (suivi d'entrée bien sur) , le terminal te ré-écrit toute les lignes sur l'écran
cat <<FIN
> hello
>
> c'est bien
>
> et puis quoi
> ....
> FIN
hello
c'est bien
et puis quoi
....
maintenant si tu tapes cat <<FIN >> test.txt
le résultat ira dans le fichier test.txt au lieu de ré-apparaitre sur l'écran
pour voir le résultat , il faut demander au système d'afficher le contenu du fichier test.txt en tapant par exemple cat test.txt
cat <<FIN >>test.txt
> hello
>
> c'est bien
> tout
>
> quoi
> FIN
cat test.txt
hello
c'est bien
tout
quoi
attention cat <<FIN >>test.txt est différent de cat <<FIN >test.txt
dans les cas où tu utilises >> , les lignes s'ajouteront au fichier test.txt
dans le cas où tu utilises > , le fichier test.txt est d'abord vidé
Dernière modification par ar barzh paour (Le 26/10/2015, à 19:31)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#6 Le 23/10/2015, à 11:13
- niemand
Re : [RESOLU] Blocage dans le terminal opérateur <<
merci pingouinux et ar barzh paour pour toutes vos explications.
Au sujet de la commande ci dessous :
ls -$(< test.txt)
Dans un premier temps, $(< test.txt), text.txt est déclaré comme entrée stantdart au niveau de l’interpréteur shell lui même. Le shell remplace test.txt par "alh" en tant que chaîne de caractère.
la commande devient donc ls - alh
Dans une seconde temps, la commande est encore ré-interprétée par le shell, ce qui nous donne le résultat attendu j'ai bon ?
Hors ligne
#7 Le 23/10/2015, à 11:25
- pingouinux
Re : [RESOLU] Blocage dans le terminal opérateur <<
$(< test.txt) va être remplacé par le contenu de test.txt (équivalent à $(cat test.txt)).
La commande exécutée sera alors
ls -alh
Hors ligne
#8 Le 23/10/2015, à 12:00
- MicP
Re : [RESOLU] Blocage dans le terminal opérateur <<
=======
Juste histoire d'éviter la confusion entraînée par le choix de la suite de caractère EOF avec End Of File (ou autre suite de caractère comme EOT):
Ça fonctionne avec n'importe quel mot (ne contenant pas de caractère espace) pourvu qu'il soit retrouvé seul en début de ligne
michel@debG53SW:~$ cat << FinDuTexte
> tant que le mot FinDuTexte
> ne sera pas trouvé seul au début d'une ligne
> les lignes seront retournées à l'entrée (stdin)
> de la commande (ici, c'est la commande "cat")
> FinDuTexte
tant que le mot FinDuTexte
ne sera pas trouvé seul au début d'une ligne
les lignes seront retournées à l'entrée (stdin)
de la commande (ici, c'est la commande "cat")
michel@debG53SW:~$
========
Un autre truc qui concerne une erreur à laquelle les débutants (que j'ai été et que je suis encore) sont souvent confrontés,
Éviter d'utiliser un nom de commande du système pour nommer un fichier. (sinon, un jour ou l'autre ça vous jouera des tours dans un script ou autre, et vous chercherez longtemps…)
Donc, test étant un nom de commande, éviter de l'utiliser comme nom de fichier. (Pour éviter ça, j'insère la suite des trois caractères tst dans les noms de fichiers que j'utilise pour des tests)
Voir :
man test
Dernière modification par MicP (Le 23/10/2015, à 12:41)
Hors ligne
#9 Le 23/10/2015, à 21:26
- niemand
Re : [RESOLU] Blocage dans le terminal opérateur <<
Merci à vous tous j'ai capté
Hors ligne
#10 Le 24/10/2015, à 06:47
- serged
Re : [RESOLU] Blocage dans le terminal opérateur <<
=======
Un autre truc qui concerne une erreur à laquelle les débutants (que j'ai été et que je suis encore) sont souvent confrontés,
Éviter d'utiliser un nom de commande du système pour nommer un fichier. (sinon, un jour ou l'autre ça vous jouera des tours dans un script ou autre, et vous chercherez longtemps…)Donc, test étant un nom de commande, éviter de l'utiliser comme nom de fichier. (Pour éviter ça, j'insère la suite des trois caractères tst dans les noms de fichiers que j'utilise pour des tests)
Voir :
man test
Plutôt :
help test
test étant une commande interne au bash.
Pour les fichiers "de test" j'utilise le nom "essai". D'où l'avantage d'avoir une langue maternelle non anglophone .
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#11 Le 24/10/2015, à 07:18
- MicP
Re : [RESOLU] Blocage dans le terminal opérateur <<
Oui, désolé, j'étais un peu distrait, d'autant que j'avais bien fait un
man builtins | less -p 'test expr'
(en fait : man builtins puis /test puis touche entrée puis 5 fois touche n)
Pour la recherche dans les manpages, vu la façon dont elles sont formatées, je viens de me rendre compte qu'il est plus simple de faire précéder le mot recherché par deux ou trois espaces :
man builtins
/ test
=======
Mais
help test
est quand même bien plus exhaustif.
Dernière modification par MicP (Le 24/10/2015, à 07:56)
Hors ligne