J'essaye d'implémenter un émulateur de terminal en Java. Il est supposé pouvoir héberger à la fois cmd.exe sous Windows et bash sur des systèmes de type Unix (je voudrais supporter au moins Linux et Mac OS X). Le problème que j'ai est que les deux cmd.exe
et bash
répètent sur leur sortie standard tout ce que j'envoie à leur entrée standard. Par exemple, dans bash, je tape "ls
", appuyez sur Entrée, à quel point l'émulateur de terminal envoie la ligne d'entrée à stdin de bash et vide le flux. Le processus sort ensuite à nouveau la ligne d'entrée "ls\n
" puis la sortie de la commande ls
.Implémentation de l'émulateur de terminal - problèmes avec entrées répétées
Ceci est un problème, car d'autres programmes, à l'exception de bash
et cmd.exe
, ne le font pas. Si je cours, à l'intérieur de bash, ou cmd.exe
, la commande "python -i
", le shell interactif python ne répète pas l'entrée de la manière bash
et cmd.exe
fait. Cela signifie qu'une solution de contournement devrait savoir de quel processus provient la sortie réelle. Je doute que ce soit ce que les émulateurs terminaux réels font. L'exécution de "bash -i
" ne change pas ce comportement. Pour autant que je sache, cmd.exe
n'a pas de modes "interactif" et "non-interactif" distincts.
EDIT: Je crée le processus hôte en utilisant la classe ProcessBuilder
. Je lis le stdout et stderr et écrit au stdin du processus en utilisant une technique semblable à la stream gobbler. Je ne définis aucune variable d'environnement avant de démarrer le processus hôte. Les commandes exactes que j'utilise pour démarrer les processus sont bash -i
pour bash et cmd
pour cmd.exe. Je vais essayer de poster un exemple de code minimal dès que je parviens à en créer un.
Cela semble pertinent pour 'bash': cacher l'entrée de l'utilisateur. http://www.tech-recipes.com/rx/278/hide-password-entry-in-bournebash-shell-script/ Je ne sais pas à quel point c'est portable. – Piskvor
C'est drôle, 'echo ls | bash ne fais rien comme ça. –
En effet, ce n'est pas le cas, même si je le lance dans mon émulateur de terminal. Je suppose que cela a quelque chose à voir avec bash sachant que l'entrée provient d'un tuyau. – Honza