A voir également:
- Envoi de texte/commande dans un terminal
- Commande terminal mac - Guide
- Invite de commande - Guide
- Excel cellule couleur si condition texte - Guide
- Transcription audio en texte word gratuit - Guide
- Mettre un texte en majuscule - Guide
6 réponses
Utilisateur anonyme
13 août 2012 à 12:58
13 août 2012 à 12:58
simplement de la même manière
ls $repertoire > /proc/$pid/fd/0
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
14 août 2012 à 09:59
14 août 2012 à 09:59
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
14 août 2012 à 15:07
14 août 2012 à 15:07
Ok, merci pour tous ces détails.
Honnêtement je pensais que c'était en rapport avec ton autre sujet ;-\
J'ai peut être une piste, avec la commande netcat ;-)
Honnêtement je pensais que c'était en rapport avec ton autre sujet ;-\
J'ai peut être une piste, avec la commande netcat ;-)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
14 août 2012 à 16:41
14 août 2012 à 16:41
Ben tu peux déjà faire communiquer 2 shells ;-)
Ce que tu tapes sur un terminal (A) est exécuté sur l'autre (B), l'affichage se faisant sur A.
Ce n'est pas exactement ce que tu demandes, mais c'est déjà une petite avancée ;-))
Ce que tu tapes sur un terminal (A) est exécuté sur l'autre (B), l'affichage se faisant sur A.
Ce n'est pas exactement ce que tu demandes, mais c'est déjà une petite avancée ;-))
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
13 août 2012 à 13:25
13 août 2012 à 13:25
Salut,
eval ls > /proc/$pid/fd/0
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
13 août 2012 à 13:46
13 août 2012 à 13:46
Oups désolé, je me suis emmêlé les pinceaux ;-\
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 13/08/2012 à 19:30
Modifié par qqchquicommenceparQ le 13/08/2012 à 19:30
«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 ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
13 août 2012 à 19:33
13 août 2012 à 19:33
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
dubcek
Messages postés
18765
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
20 février 2025
5 624
14 août 2012 à 08:27
14 août 2012 à 08:27
en ouvrant un nouveau terminal ?
xterm -e 'echo $$;'"$SHELL"
erratum41
Messages postés
1
Date d'inscription
dimanche 28 octobre 2012
Statut
Membre
Dernière intervention
28 octobre 2012
Modifié par erratum41 le 28/10/2012 à 16:39
Modifié par erratum41 le 28/10/2012 à 16:39
sous ubuntu gnome
ouvrir bash :gnome-terminal --geometry 120x20+50+51
repere son id :ps -x|grep "bash"
envoi commande :ls >> /dev/pts/[numero bash]
ç'a peut aider a+
ouvrir bash :gnome-terminal --geometry 120x20+50+51
repere son id :ps -x|grep "bash"
envoi commande :ls >> /dev/pts/[numero bash]
ç'a peut aider a+
13 août 2012 à 13:09
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"