Comment le shell gère echo -n ? - C - Programmation
Marsh Posté le 14-10-2015 à 17:08:58
Je suis pas sur d'avoir bien pigé ta question. QQue chose comme ça?
printf("test" );
fflush(stdout);
A+,
Marsh Posté le 14-10-2015 à 19:17:02
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 : |
Cependant, dans le cas de la commande echo -n, je ne comprend pas comment ça fonctionne.
Citation : |
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.
Marsh Posté le 14-10-2015 à 22:31:23
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+,
Marsh Posté le 15-10-2015 à 14:42:28
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 |
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 ?
Marsh Posté le 15-10-2015 à 14:51:23
|
Le prompt n'est pas affiché sur la prochaine ligne dans le cas d'un echo -n. Ceci est un comportement normal.
Marsh Posté le 15-10-2015 à 17:30:51
Oui, effectivement, mais pas essaye avec zsh comme shell.
Marsh Posté le 16-10-2015 à 11:49:01
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+,
Marsh Posté le 14-10-2015 à 15:13:28
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 ?
$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.