IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Générer fichier bash en insérant les arguments


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut Générer fichier bash en insérant les arguments
    Bonjour

    Alors je vous le dis tout de suite je suis débutant

    J'ai besoin d'utiliser plink pour certaine taches.
    Plink peut exécuter des scripts, mais il est impossible d'envoyer des paramètres à ce script à ce qu'il paraît.

    plink <user>@<ip> -pw <pwd> -m tmp.sh > log.txt

    La solution préconisée sur le net est de générer le script dynamiquement avant de faire appel à plink:
    https://stackoverflow.com/questions/...line-via-plink

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo echo %1 > script.tmp
    plink.exe -ssh username@host -pw gbG32s4D/ -m script.tmp

    Ok très bien. Mais moi j'aimerai générer ce fichier temporaire à partir d'un fichier script existant (qui me sert de template pour ainsi dire). Comment je fais?
    J'ai essayé avec la commande "cat" mais je n'y arrive pas.

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    sous Linux ça se fait facilement, en bricolant un peu au besoin à coup de awk par exemple ou de sed, mais je vois que tu marques "%1" pour désigner un argument et comme tu parles de plink, j'imagine que tu es sous Windows... (ici c'est le forum shell et commandes GNU, très différent du cmd Windows maigrichon)

    si tu tournes avec Powershell tu peux possiblement recoder un truc pour faire du chercher/remplacer dans ton template (éventuellement en mémoire, à voir dans le forum adéquat), avec le batch seul par contre ça me semble compliqué, et si tu as accès aux outils du monde Linux, ça pourrait en gros ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'plink <user>@<ip> -pw <pwd> -m tmp.sh > log.txt' | awk -vUSER="toto" -vIP="192.168.1.1" -vPASS="coincoin" '{gsub(/<user>/, USER); gsub(/<ip>/, IP); gsub(/<pwd>/, PASS); print}'
    plink toto@192.168.1.1 -pw coincoin -m tmp.sh > log.txt

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Non non je suis bien sous linux.
    (Le code en haut c'est l'exemple sur stackoverflow.com )

    Vais jeter un coup d'oeil à awk et sed alors. Merci

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    (Le code en haut c'est l'exemple sur stackoverflow.com )
    Et oui. Et c'est écrit en toutes lettres :

    Here is the command I ran from Windows command prompt
    Ce qu'on peut traduire par :

    "Voici la commande que j'exécute à partir de la console Windows".

    Donc on est bien en présence d'un internaute sous Windows qui cherche à se connecter à un Linux distant pour exécuter des commandes.
    Rien à voir avec toi, @aller.
    Non seulement ce n'est pas le même cas, mais je pense aussi que plink n'est d'aucune utilité et qu'un telnet, ssh, ftp, bash, ou autre, est suffisant pour accomplir ta mission.
    Ici, ssh semble le protocole adéquat.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    mmh
    ssh? Je suis pas sûr.

    Je vais détailler un peu plus.

    J'ai besoin à partir d'un SBC sous Armbian de me connecter à des appareils réseau via ssh. Les script à exécuter se trouve côté SBC et non pas sur les équipements réseau.

    Or avec plink on peut spécifier en argument un fichier/script local qui sera exécuter du côté équipement réseau.
    Alors qu'en SSH, il me semble, je ne peux faire appel qu'à des scripts se trouvant sur l'équipement réseau.

    Je me trompe?

    EDIT:
    Ah ok ssh sait faire ca aussi en effet.
    https://unix.stackexchange.com/quest...lude-arguments

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Bonsoir

    Je reviens vers vous parce que j'ai un petit soucis avec mes script.
    Alors votre solution d'utiliser SSH au lieu de plink était clairement la bonne, je vous remercie encore.

    J'ai par contre un problème dans certain cas de figure, et mon niveau médiocre en Bash/Linux ne m'aide pas.

    J'ai besoin de lancer la mise à jour d'un routeur via SSH et script local.

    Le script local ressemble à ca, il est lancé en ssh en mode tty:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        #!/bin/bash
     
        run_op=/opt/vyatta/bin/vyatta-op-cmd-wrapper
        run_cfg=/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper
     
        if [ -z "$1" ]
         then
           MSG="No firmware file supplied"
           printf "$MSG"
         else   
           TMP=$(printf 'Yes' | $run_op add system image $1)   
     
           $run_op reboot now   
        fi
     
        exit 0
    Alors le wrapper c'est juste pour exécuter des scripts "unattended" sur le routeur.


    Alors en manuel la mise à jour se fait de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        ubnt@ER-X:~$ add system image https://dl.ui.com/firmwares/edgemax/v1.10.x/ER-e50.v1.10.9.5166958.tar
    
        Version [v1.10.9.5166958.190213.1952] is about to be replaced
    
        Are you sure you want to replace old version? (Yes/No) [Yes]: yes
    
        Trying to get upgrade file from https://dl.ui.com/firmwares/edgemax/v1.10.x/ER-e50.v1.10.9.5166958.tar
    
         % Total   % Received % Xferd Average Speed  Time   Time    Time Current
    
                                        Dload Upload  Total  Spent   Left Speed
    
        100 78.3M 100 78.3M   0    0 4888k     0 0:00:16 0:00:16 --:--:-- 5223k
    
        Download succeeded
    
        Checking upgrade image...Done
    
        Preparing to upgrade...Done
    
        Clearing directory /var/cache/apt (351.5K)...Done
    
        Copying upgrade image...Not enough disk space for root file system
    
        Do you want to delete old version first? (Yes/No) [Yes]: yes
    
        Removing old image...Done
    
        Done
    
        Checking upgrade image...Done
    
        Copying config data...Done
    
        Finishing upgrade...Done
    
        Upgrade completed
    A deux reprise je dois entrer "yes" pour lancer l'installation et effacer les anciennes sauvegarde pour faire de la place.


    Alors au niveau de mon script, normalement le printf 'Yes' devrait s'en charger.
    Le soucis c'est que la mise à jour firmware semble bien installé, par contre la commande d'installation ne se termine pas, car le reboot n'est pas lancé alors que je l'ai bien dans le script.
    Bref pourquoi????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TMP=$(printf 'Yes' | $run_op add system image $1)   
     
    $run_op reboot now
    Pourquoi le "reboot now" ne se lance pas??? Pourquoi la commande de mise à jour ne se termine pas alors qu'après vérification, le firmware a bien été installé???


    Merci

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    s'il faut deux yes (la commande existe), mais que tu n'en envoies qu'un... !

    mais tu ne peux pas en envoyer deux (si je me souviens bien), car le premier processus recevra les deux. :/

    dans ton cas, je recommanderais l'emploi d'expect, que je n'utilise pas, et dont je ne connais donc pas le fonctionnement détaillé.
    en gros, il faut faire exécuter le programme par expect (en fait une sous-commande), attendre que le programme affiche le message auquel tu veux répondre, et de lui envoyer le signal/texte que tu veux.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Générer fichiers pour les Market places
    Par logs77 dans le forum Autres Solutions d'entreprise
    Réponses: 2
    Dernier message: 24/08/2010, 11h38
  2. Générer web service en utilisant les fichiers .wsdl
    Par jhooles dans le forum Services Web
    Réponses: 1
    Dernier message: 05/08/2010, 09h21
  3. [E-02] Générer un fichier txt en formatant les colonnes
    Par meumeu73.1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/11/2008, 11h23
  4. Réponses: 0
    Dernier message: 04/08/2008, 15h15
  5. [FPDF] Générer un fichier PDF en reprenant les variables d'un formulaire
    Par pascale86 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/02/2008, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo