Envoi de texte/commande dans un terminal
Lineo
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai une question bien différente de mon post précédent à vous poser car je n'arrive pas non plus à trouver une solution .
Alors je vais donner directement un exemple :
Si j'ouvre un terminal, puis un autre, et que dans ce 2eme terminal, je vais dans /proc/PID_DU_PREMIER_TERMINAL/fd
Dans ce répertoire il y a les liens vers les descripteurs ouverts du premier terminal : 0,1,2,255 (qui pointent tous dans mon exemple vers /dev/pts/0)
Je peux alors faire par exemple : echo ls >0
Et "ls" + un retour à la ligne s'affichent bien sur mon premier terminal.
Maintenant, comment faire pour que la commande "ls" s'exécute bien dans mon premier terminal au lieu de juste s'afficher ?
Comme si j'avais tapé ls et validé par la toucher "Entrée"
Je ne trouve pas la solution
Sauriez-vous m'aider ?
Merci
:-)
J'ai une question bien différente de mon post précédent à vous poser car je n'arrive pas non plus à trouver une solution .
Alors je vais donner directement un exemple :
Si j'ouvre un terminal, puis un autre, et que dans ce 2eme terminal, je vais dans /proc/PID_DU_PREMIER_TERMINAL/fd
Dans ce répertoire il y a les liens vers les descripteurs ouverts du premier terminal : 0,1,2,255 (qui pointent tous dans mon exemple vers /dev/pts/0)
Je peux alors faire par exemple : echo ls >0
Et "ls" + un retour à la ligne s'affichent bien sur mon premier terminal.
Maintenant, comment faire pour que la commande "ls" s'exécute bien dans mon premier terminal au lieu de juste s'afficher ?
Comme si j'avais tapé ls et validé par la toucher "Entrée"
Je ne trouve pas la solution
Sauriez-vous m'aider ?
Merci
:-)
A voir également:
- Envoi de texte/commande dans un terminal
- Commande terminal mac - Guide
- Invite de commande - Guide
- Commande en cours de validation fnac - Forum Consommation & Internet
- Transcription audio en texte word gratuit - Guide
- Supprimer historique commande amazon - Forum Consommation & Internet
6 réponses
Salut,
Si tu nous expliquais la finalité de la chose, peut être serions-nous plus à même de trouver/d'envisager une solution, non ? ;-\
Si tu nous expliquais la finalité de la chose, peut être serions-nous plus à même de trouver/d'envisager une solution, non ? ;-\
Salut,
Pour l'instant je n'ai pas d'autre finalité que celle là, j'aimerais juste savoir comment faire afin de mieux comprendre le fonctionnement d'un terminal avec /bin/bash
D'après ce que je sais un processus ouvre par défaut 3 descripteurs : STDIN, STDOUT, et STDERR, mais dans le cas d'un terminal qui lance un bash, là le STDIN est connecté à /dev/null pour le terminal, et bash est connecté à un /dev/pts/1 -> qui serait géré par le noyau et ensuite "connecté" au clavier ?. pourtant dans le cas d'une connexion par SSH, il y a ce pseudo terminal mais on n'utilise plus le clavier physique de la machine, d'où ma déduction : on peut passer outre et envoyer directement les commandes depuis un flux pour qu'elles soient interprétées comme si elles venaient du "circuit" connecté au clavier.
Quand on fait une redirection vers ce /dev/pts/1, le texte s'affiche bien dans le terminal mais impossible de "valider" donc il faudrait un code spécial pour simuler "Entrée" ?
Au niveau de bash, J'ai remarqué qu'il pouvait traiter du texte avec saut de ligne et que s'il le cache au travers des guillemets qui n'ont de valeur que pour l'utilisateur qui les saisit et les voit, bash lui utilise le caractère \0 pour séparer, voir peut être d'autres.
Donc le fait qu'il passe une ligne au lieu de valider la commande ne m'étonne pas, et j'aimerais savoir comment il faut faire cette touche "Entrée" en reproduisant le signal/la séquence qui est envoyée quand on le fait depuis un clavier.
De plus avec un bash -s, on peut bien passer les commandes sur l'entrée standard, en séparant par des saut de ligne pour valider et là ça marche ! Et si on veut faire du multilignes, il suffit de mettre des guillemets "" exactement comme on doit le faire quand on saisit au clavier ! Alors comment faire cela avec un bash déjà ouvert dans un terminal qui écoute bien quelquepart ?
Savoir faire cela m'aiderait beaucoup à comprendre le fonctionnement de linux, des pseudos terminaux et des interpréteurs de commandes comme bash. Dans l'immédiat je n'ai pas d'autre finalité directe, mais ça pourra toujours servir un jour, je n'en doute pas.
Désolé si je ne suis pas très clair dans mes explications plus haut, le principal est dans ces dernières lignes qui résument la finalité de la chose.
Pour l'instant je n'ai pas d'autre finalité que celle là, j'aimerais juste savoir comment faire afin de mieux comprendre le fonctionnement d'un terminal avec /bin/bash
D'après ce que je sais un processus ouvre par défaut 3 descripteurs : STDIN, STDOUT, et STDERR, mais dans le cas d'un terminal qui lance un bash, là le STDIN est connecté à /dev/null pour le terminal, et bash est connecté à un /dev/pts/1 -> qui serait géré par le noyau et ensuite "connecté" au clavier ?. pourtant dans le cas d'une connexion par SSH, il y a ce pseudo terminal mais on n'utilise plus le clavier physique de la machine, d'où ma déduction : on peut passer outre et envoyer directement les commandes depuis un flux pour qu'elles soient interprétées comme si elles venaient du "circuit" connecté au clavier.
Quand on fait une redirection vers ce /dev/pts/1, le texte s'affiche bien dans le terminal mais impossible de "valider" donc il faudrait un code spécial pour simuler "Entrée" ?
Au niveau de bash, J'ai remarqué qu'il pouvait traiter du texte avec saut de ligne et que s'il le cache au travers des guillemets qui n'ont de valeur que pour l'utilisateur qui les saisit et les voit, bash lui utilise le caractère \0 pour séparer, voir peut être d'autres.
Donc le fait qu'il passe une ligne au lieu de valider la commande ne m'étonne pas, et j'aimerais savoir comment il faut faire cette touche "Entrée" en reproduisant le signal/la séquence qui est envoyée quand on le fait depuis un clavier.
De plus avec un bash -s, on peut bien passer les commandes sur l'entrée standard, en séparant par des saut de ligne pour valider et là ça marche ! Et si on veut faire du multilignes, il suffit de mettre des guillemets "" exactement comme on doit le faire quand on saisit au clavier ! Alors comment faire cela avec un bash déjà ouvert dans un terminal qui écoute bien quelquepart ?
Savoir faire cela m'aiderait beaucoup à comprendre le fonctionnement de linux, des pseudos terminaux et des interpréteurs de commandes comme bash. Dans l'immédiat je n'ai pas d'autre finalité directe, mais ça pourra toujours servir un jour, je n'en doute pas.
Désolé si je ne suis pas très clair dans mes explications plus haut, le principal est dans ces dernières lignes qui résument la finalité de la chose.
Oui c'est pas du tout ce que je demandais :))
Je souhaite simuler l'envoi d'une commande venant du clavier à un terminal.
Si la chaine ressemble à
clavier-->driver-->noyau-->FD-->pseudo-terminal-->bash
Il me faut faire : "commande"+[TOUCHE ENTRÉE] > FD
Avec ton astuce netcat c'est juste un programme(le serveur) qui exécute des commandes et affiche le résultat dans son terminal.
Mais merci en tout cas d'essayer de m'aider :)
J'ai l'impression que je demande un truc compliqué ou sans solution :(
En tout cas si c'est pas possible entre un même utilisateur, root doit pouvoir le faire d'une façon ou d'une autre. root peut tout faire
Je souhaite simuler l'envoi d'une commande venant du clavier à un terminal.
Si la chaine ressemble à
clavier-->driver-->noyau-->FD-->pseudo-terminal-->bash
Il me faut faire : "commande"+[TOUCHE ENTRÉE] > FD
Avec ton astuce netcat c'est juste un programme(le serveur) qui exécute des commandes et affiche le résultat dans son terminal.
Mais merci en tout cas d'essayer de m'aider :)
J'ai l'impression que je demande un truc compliqué ou sans solution :(
En tout cas si c'est pas possible entre un même utilisateur, root doit pouvoir le faire d'une façon ou d'une autre. root peut tout faire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
«le "ls" est exécuté dans le premier terminal, et le résultat affiché dans le second.
Alors que je cherche à exécuter ls dans le premier terminal, comme si je l'avais saisi au clavier dedans. »
J'ai du sable dans les engrenages : je ne vois la différence entre une commande dont on envoie le résultat dans un autre terminal, et une commande envoyée et exécutée dans un autre terminal.
Le résultat de la commande est affiché sur le deuxième terminal !
quelle est la finalité de la manipulation ?
Alors que je cherche à exécuter ls dans le premier terminal, comme si je l'avais saisi au clavier dedans. »
J'ai du sable dans les engrenages : je ne vois la différence entre une commande dont on envoie le résultat dans un autre terminal, et une commande envoyée et exécutée dans un autre terminal.
Le résultat de la commande est affiché sur le deuxième terminal !
quelle est la finalité de la manipulation ?
J'ai eu du mal aussi, mais ouvre 2 teminaux et place-toi dans 2 répertoires différents, fais un "pwd" et envois-le dans l'autre, c'est la répertoire du 1er qui s'affiche alors que notre ami voudrait que ce soit celui du terminal qui reçoit...
Je crois que la seule façon de faire ça c'est en lançant un screen auparavant ;-\
Je crois que la seule façon de faire ça c'est en lançant un screen auparavant ;-\
désolé si je n'étais pas clair
La finalité de la manip c'est de faire exécuter une commande par un terminal, mais depuis un autre, peu importe la commande
Supposons que je sois dans mon 2eme terminal :
# echo $$
6666
echo 'echo $$' >/proc/5555/fd/0
Et dans autre terminal de PID 5555, je dois voir :
# echo $$
5555
exactement comme si je l'avais saisi au clavier
La finalité de la manip c'est de faire exécuter une commande par un terminal, mais depuis un autre, peu importe la commande
Supposons que je sois dans mon 2eme terminal :
# echo $$
6666
echo 'echo $$' >/proc/5555/fd/0
Et dans autre terminal de PID 5555, je dois voir :
# echo $$
5555
exactement comme si je l'avais saisi au clavier
Alors que je cherche à exécuter ls dans le premier terminal, comme si je l'avais saisi au clavier dedans.
En gros le terminal 1 écoute ce qui est tapé au clavier sur STDIN. Je souhaite envoyer ma commande dans ce STDIN depuis mon autre terminal.
Mais je ne sais pas comment lui dire que j'ai appuyé sur "Entrée"