Kirjoittaja Aihe: Kuika Expectissä voi luoda bash-muuttujan?  (Luettu 2220 kertaa)

marvinmarvin

  • Käyttäjä
  • Viestejä: 125
    • Profiili
Kuika Expectissä voi luoda bash-muuttujan?
« : 28.01.08 - klo:19.29 »
Eli joo. Virittelen esimerkin mukaista bash-skriptiä.
Homman tulisi toimia näin:

Bashissa asetetaan joukko muuttujia. Sen jälkeen bash käynnistää inline-expectin.
Expect käyttää bashin muuttujia. Virheen sattuessa expect asettaa EXIT_CODE muuttujan arvoksi 1, ja ohjelman suoritus palaa bash-skriptille.
Bashin tulisi saada EXIT_CODEN arvo.

Ongelmana on se, että expectin asettama EXIT_CODE ei näy bashille. Kuinka siis expectissä välitetään (tai luodaan) muuttuja ja sen arvo takaisin bashille ???
Ei meinaa löytyä millään vastausta tuohon...

Koodia: [Valitse]
#!/bin/bash
TARGET_ADDRESS="localhost"
EXIT_CODE="0"

#Expect koodi alkaa:
/usr/bin/expect -- << EndMark
spawn bash

        send -- "ftp $TARGET_ADDRESS\r"
        expect  {
                "Connection refused"            {
                puts "FAILED : FTP - Connection to $TARGET_ADDRESS refused.\r"
                set EXIT_CODE 1
                exit
                                                          }
                   }


EndMark
#Expect-koodi loppuu

                if [ "$EXIT_CODE" = "1" ]; then
                        echo " :File transfer failed"
                        ...
                        ...
                else
                ......
                ......
                fi

« Viimeksi muokattu: 28.01.08 - klo:19.31 kirjoittanut marvinmarvin »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: Kuika Expectissä voi luoda bash-muuttujan?
« Vastaus #1 : 28.01.08 - klo:21.17 »
En nyt ole täysin varma mutta uskon ettei ympäristömuuttujia pysty asettamaan komentoketjussa ylöspäin. Paluuarvon pystyt kuitenkin välittämään exit-funktion avulla eli komennat tuolla expect-skriptissä "exit 1" ja sen jälkeen bash-skriptin puolella tarkistat muuttujan "$?" arvon.

Koodia: [Valitse]
#!/bin/bash
TARGET_ADDRESS="localhost"

expect -- << EndMark
    spawn bash
    send -- "ftp $TARGET_ADDRESS\r"
    expect  {
        "Connection refused"    {
            puts "FAILED : FTP - Connection to $TARGET_ADDRESS refused.\r"
            exit 1
        }
    }
EndMark

if [ $? = 1 ]; then
    echo " :File transfer failed"
else
    echo " :File transfer succeeded"
fi

marvinmarvin

  • Käyttäjä
  • Viestejä: 125
    • Profiili
Vs: Kuika Expectissä voi luoda bash-muuttujan?
« Vastaus #2 : 29.01.08 - klo:10.55 »
Jes! Sehän toimii !

Juuri tuota ratkaisua hain. Aivan loistavaa :)
Kiitoksia erittäin paljon.