Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/10/2015, à 00: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, à 22:26)

Hors ligne

#2 Le 23/10/2015, à 07: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, à 11:08

niemand

Re : [RESOLU] Blocage dans le terminal opérateur <<

Salut pingouinux,

Tout marche nickel + les différentes méthodes je suis aux anges smile 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, à 11:11)

Hors ligne

#4 Le 23/10/2015, à 11: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, à 11:35)

Hors ligne

#5 Le 23/10/2015, à 11: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, à 20:31)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 12: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, à 12: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, à 13: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, à 13:41)

Hors ligne

#9 Le 23/10/2015, à 22:26

niemand

Re : [RESOLU] Blocage dans le terminal opérateur <<

Merci à vous tous j'ai capté smile

Hors ligne

#10 Le 24/10/2015, à 07:47

serged

Re : [RESOLU] Blocage dans le terminal opérateur <<

MicP a écrit :

=======
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 smile .


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, à 08: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, à 08:56)

Hors ligne