Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1534 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Comment le shell gère echo -n ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment le shell gère echo -n ?

n°2267725
bill g@te
Posté le 14-10-2015 à 15:13:28  profilanswer
 

Bonjour,
 
Je me pose une question sur le fonctionnement de la commande echo dans un shell, plus précisément avec l'option -n.
Comment le shell fait-il pour passer à la ligne suivante sans écrire un saut de ligne ?
 

Citation :


$prompt> echo -n test
test%
$prompt>  


L'option -n permet de ne pas écrire de saut de ligne, cependant le shell doit lui sauter une ligne pour passer le prompt à a prochaine ligne, non ?
J'ai fais des tests en C ( dans un minishell que j'ai fais ) mais il y a rien à faire, je n'arrive pas à obtenir le même résultat.
 
Savez-vous comment c'est fait ?
Merci.

mood
Publicité
Posté le 14-10-2015 à 15:13:28  profilanswer
 

n°2267736
gilou
Modérateur
Modzilla
Posté le 14-10-2015 à 17:08:58  profilanswer
 

Je suis pas sur d'avoir bien pigé ta question. QQue chose comme ça?  
printf("test" );
fflush(stdout);
 
A+,


Message édité par gilou le 14-10-2015 à 17:10:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2267741
bill g@te
Posté le 14-10-2015 à 19:17:02  profilanswer
 

Je me suis mal exprimé, imaginons un programme "my_shell" qui correspond à un shell ^^, ce dernier implémente le builtin echo.
A chaque fin de commande, le prompt s'affiche (on saute donc une ligne pour afficher le prompt sur la prochaine ligne, comme un shell normal quoi).
 

Citation :


$prompt> ./my_shell
$my_shell> pwd
/un/path/ (le shell saute une ligne a la fin de la commande pour afficher son prompt)
$my_shell> ...


 
Cependant, dans le cas de la commande echo -n, je ne comprend pas comment ça fonctionne.
 

Citation :


$my_shell> echo -n Salut
Salut% (à cette instant si le shell saute une ligne pour afficher le prompt, le "%" n'apparaît pas et ça fausse le résultat de la commande echo -n)


 
Du coup, je ne comprend pas comment le shell reprend la main après la commande echo -n, sans sauter une ligne qui comme vu plus haut, fausserai le résultat de la commande echo -n.
 
Merci gilou.


Message édité par bill g@te le 14-10-2015 à 19:17:46
n°2267748
gilou
Modérateur
Modzilla
Posté le 14-10-2015 à 22:31:23  profilanswer
 

C'est comme je le pensais, c'est pas le shell, mais la commande echo, qui gère ça, en rajoutant un \n ou non à la fin selon que le -n est positionné ou non: https://gist.github.com/dchest/1091803
 
Certes, ce qui précède n'est pas le source d'une commande shell, mais d'une commande indépendante, en allant voir aussi le source du bash de gnu, on a à la fin du code:
  if (display_return)
    putchar ('\n');
ou display_return est un flag mis a 0 par l'option -n
 
A+,

Message cité 1 fois
Message édité par gilou le 14-10-2015 à 22:57:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2267750
Profil sup​primé
Posté le 14-10-2015 à 23:03:38  answer
 

Tu mets un saut de ligne dans le prompt ?

n°2267771
bill g@te
Posté le 15-10-2015 à 14:42:28  profilanswer
 

gilou a écrit :

C'est comme je le pensais, c'est pas le shell, mais la commande echo, qui gère ça, en rajoutant un \n ou non à la fin selon que le -n est positionné ou non: https://gist.github.com/dchest/1091803
 
Certes, ce qui précède n'est pas le source d'une commande shell, mais d'une commande indépendante, en allant voir aussi le source du bash de gnu, on a à la fin du code:
  if (display_return)
    putchar ('\n');
ou display_return est un flag mis a 0 par l'option -n
 
A+,


Oui mais dans le cas ou il ne le fait pas, soit avec le flag mis à 1, le shell doit quand à lui afficher son prompt sur la prochaine ligne, tu es d'accord ? Dans ce cas-ci le shell n'a pas le choix, il doit \n pour passer à la ligne suivante, ce qui fausse le résultat de la commande echo -n, non ?

n°2267773
xilebo
noone
Posté le 15-10-2015 à 14:51:23  profilanswer
 


root@debian:~# echo toto
toto
root@debian:~# echo -n toto
totoroot@debian:~#


 
Le prompt n'est pas affiché sur la prochaine ligne dans le cas d'un echo -n. Ceci est un comportement normal.

n°2267804
bill g@te
Posté le 15-10-2015 à 17:30:51  profilanswer
 

Oui, effectivement, mais pas essaye avec zsh comme shell.

n°2267860
gilou
Modérateur
Modzilla
Posté le 16-10-2015 à 11:49:01  profilanswer
 

http://stackoverflow.com/questions [...] e-like-zsh
 
IMHO, le code de zsh vérifie la position du curseur dans la ligne courante et si elle n'est pas a 0, il imprime d'abord "%%\n"
(à partir du moment ou tu as un prompt, tu es en mode direct et non en mode script, et donc tu peux interroger la console pour déterminer la position du curseur).
 
A+,


Message édité par gilou le 16-10-2015 à 11:52:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Comment le shell gère echo -n ?

 

Sujets relatifs
[resulu]Changer de répertoire courant sans shell sur Gnu/Linux.[SHELL/SED] Extraire un bout de chaine
[Shell Linux] Recherche dans un fichier evoluéaide script shell pour projet scolaire
commandes Shell[POWER SHELL] Problème d'import de module Active Directory
choisir entre shell et powershell ? quel choisir ?Lancement d'un script shell + fermeture de session
SSH2_shell() pour commande suProblème shell_exec fonctionne pas Graphviz Mediawiki
Plus de sujets relatifs à : Comment le shell gère echo -n ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR