Forum général.général Reprendre la main sur un tty

Posté par  .
Étiquettes : aucune
0
20
juil.
2010
Bonjour à tous,

Je cherche à piloter un programme spécifique à travers une connexion SSH via un autre programme lancé en local sur ma machine (le programme à piloter attend un jeu de commandes particulier). L'idée serait de me logguer en SSH sur la machine, lancer un certain nombre de commandes au niveau du shell (initialisation, mise en place de l'environnement, etc), puis lancer le programme à piloter. Une fois que ce programme est lancé, il faudrait donc que je puisse récupérer l'entrée et la sortie de celui-ci pour automatiser ce que je vais y envoyer.

Y'a-t'il moyen d'intercepter au niveau tty ou autre ? Le programme de pilotage serait en C.

Merci d'avance de vos réponses
  • # expect

    Posté par  (site web personnel) . Évalué à 6.

    expect (en tcl) existe pour cela. Il y a aussi des bindings en perl et python.

    Je suis en train de voir qu'il existe libexpect pour piloter expect depuis C.
  • # Duplication des E/S standards

    Posté par  . Évalué à 1.

    Bonsoir,

    A partir d'un programme en C, tu peux toujours redéfinir tes 3 flux d'E/S (stdin, stdout, stderr) à l'aide de l'appel dup(int) de <unistd.h> décrit dans "man dup".

    Tu peux aussi le faire en ligne de commande: (ici en concatenant un fichier donné sur l'entrée standard puis un fichier test.sh sur l'entrée standard de mon programme "bash")
    shell1# echo "echo hello world" > test.sh
    shell1# cat /dev/stdin test.sh | bash
    shell2# echo "ma commande à la main"
    puis CTRL+D
    affiche bien:
    ma commande à la main
    hello world
  • # Gni ?

    Posté par  . Évalué à 4.

    Je ne comprends pas trop ton problème : ton programme de pilotage va lancer le ssh ; il a donc le contrôle sur les E/S de ce processus qui, par définition de ce qu'est ssh, te permet de contrôler le terminal distant. Non ?
  • # La libssh

    Posté par  (site web personnel) . Évalué à 2.

    Au final, le plus simple serait peut-être de passer par la libssh [http://www.libssh.org/]

    J'ai réalisé un programme C++ en passant par cette bibliothèque pour lancer des commandes ssh simplement et vu mon niveau assez faible en C++, la bibliothèque est assez simple à manipuler.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.