logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 22-10-2019 11:49:29

Anard
Membre
Distrib. : Gentoo 2.9 / Xubuntu 20.04 / Debian 11
Inscription : 19-07-2017
Site Web

[bash]Récupérer un bout de résultat de commande dans un variable

Bonjour,

J'ai installé un serveur distant sur lequel je peux accéder par ssh.
Mais parfois, faut avouer que c'est plus agréable avec une session graphique, alors je peux y démarrer un serveur vnc.

J'aimerais créer un petit script sur mon client pour ouvrir une session VNC en une commande. Mon problème est que quand je démarre le serveur VNC (TightVNC), s'il y en avait un autre d'actif, le port utilisé est le prochain inutilisé. Je voudrais donc récupérer ce numéro de port dans une variable.

Voici l'idée :
tunnelize-ssh :


scrPort=-1
$ip_locale=<ip_locale>
$ip_disante=<ip_serveur>
if [ "$#" = 0 ]; then
        scrPort=1
elif [ $1 = "-p" ] || [ $1 = "--port" ]; then
    if ! [[ $2 =~ ^[0-9]$ ]]; then
        echo "Paramètre invalide, le port doit être un nombre entre 0 et 9"
        exit
    else
        scrPort=$2
    fi
fi

let scrPort+=5900
echo "Tunnelisation SSH sur le port $scrPort..."
echo "Tapez lsof -ti:$scrPort | xargs kill -9 pour arrêter"
echo
ssh -p 1023 -L $scrPort:$ip_locale:$scrPort -f -C -N -l $USER $ip_distante
 



script


#!/bin/bash
# Connection au serveur SSH pour démarrer un serveur VNC
ssh -p <port> <ip_serveur> << ESESS
    vncserver
    # renvoie un résultat de la forme :
    # New 'X' desktop is <serveur>:<port alloué>

    # Starting applications specified in /etc/X11/Xvnc-session
    # Log file is /home/anard/.vnc/<serveur>:<port alloué>.log

    # Je voudrais récupérer <port alloué> dans une variable, par exemple $allocPort

    exit
ESESS

# Tunnellisation via le script précédent sur le port alloué précédemment
tunnelize-ssh -p $allocPort
# Ouverture de Remmina et connection au serveur VNC
remmina -c ~/.remmina/vnc-server.remmina

# Fermeture de la session
lsof -ti:$allocPort | xargs kill -9
ssh -p <port> <ip_serveur> << ESERV
    vncserver -kill :$allocPort
    exit
ESERV
exit



Malheureusement, je n'arrive pas à récupérer la sortie de vncserver.
Même connecté en ssh sur le serveur (sans l'intermédiaire du script), j'obtiens une variable vide :

$ var=$(vncserver)
New 'X' desktop is serveur:1

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/anard/.vnc/serveur:1.log

$ echo $var

$



Pourriez-vous m'aider à récupérer cette variable ?

Dernière modification par Anard (22-10-2019 12:09:48)


"iMack" : GA-H97M-D3H, Intel i5 4460, 16Go RAM / Bootloader Clover - macOS Mojave / Gentoo-Xfce
"Serveur" : Dell Optiplex 360, Intel Q8200, 2Go RAM / Debian Bullseye
"Portable" : Asus E502NA, Intel N4200, 8Go RAM / DebianFacile Bullseye

Hors ligne

#2 22-10-2019 13:59:03

Anard
Membre
Distrib. : Gentoo 2.9 / Xubuntu 20.04 / Debian 11
Inscription : 19-07-2017
Site Web

Re : [bash]Récupérer un bout de résultat de commande dans un variable

Re.

J'ai avancé un peu. En fait vncserver est un script Perl.
C'est pas très propre car s'il y a une MAJ, ça risque d'effacer mon adaptation, mais j'ai modifié directement le script /usr/bin/vcnserver pour retourner la valeur du port

exit $displayNumber;


Derrière, en bash, je peux récupérer la valeur, ça fonctionne plutôt bien comme ceci (en tapant à la main) :

$ ssh <serveur>
anard@serveur:~$ vncserver
New 'X' desktop is serveur:14
Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/anard/.vnc/serveur:14.log
Return value will be the display port

anard@serveur:~$ allocatedPort=$?
anard@serveur:~$ exit $allocatedPort
déconnexion
Connection closed.
$ allocPort=$?
$ echo $allocPort
14
 


Youpi ! J'ai bien récupéré ma valeur ! big_smile

Malheureusement, quand je cherche à encapsuler ma connection ssh dans mon script bash, je ne peux plus récupérer la valeur en question :

 # Connection au serveur SSH pour démarrer un serveur VNC
ssh <serveur> << ESESS
        vncserver
        allocatedPort=$?
        echo "allocated : $allocatedPort"
        exit $allocatedPort
ESESS
allocPort=$?
echo "Port alloué : $allocPort"

>> RETOUR :
New 'X' desktop is serveur:13

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/anard/.vnc/serveur:13.log
Return value will be the display port

allocated :
Port alloué : 0
 


Ah bah non hmm

Dernière modification par Anard (22-10-2019 14:06:57)


"iMack" : GA-H97M-D3H, Intel i5 4460, 16Go RAM / Bootloader Clover - macOS Mojave / Gentoo-Xfce
"Serveur" : Dell Optiplex 360, Intel Q8200, 2Go RAM / Debian Bullseye
"Portable" : Asus E502NA, Intel N4200, 8Go RAM / DebianFacile Bullseye

Hors ligne

Pied de page des forums