Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: marvinmarvin - 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...
#!/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
-
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.
#!/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
-
Jes! Sehän toimii !
Juuri tuota ratkaisua hain. Aivan loistavaa :)
Kiitoksia erittäin paljon.