expect(1)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

expect(1) - Linux manual sida

Namn

expect - Programmerad dialog med interaktiva program, Version 5

Synopsis

expect [ -dDinN ] [ -c kommandon ] [ [ -[f|b] ] kommandofil ] [ argument ]

Introduktion

Expect är ett program som "pratar" med andra interaktiva program enligt ett skript. Genom att följa skriptet vet Expect vad som kan förväntas från ett program och vad det korrekta svaret bör vara. Expect kan användas direkt i C eller C++ (utan Tcl) och kan även integreras med Tk genom Expectk.

Expect är särskilt användbart för att:

  • Automatisera inloggning på fjärrsystem
  • Interagera med interaktiva kommandoradsverktyg
  • Automatisera felhantering vid exekvering av systemverktyg
  • Hantera terminalapplikationer

Användning

Expect läser en kommandofil och exekverar instruktioner enligt den. Alternativt kan det användas med `#!` notation i skript:

#!/usr/local/bin/expect -f

Några viktiga flaggor:

  • `-c "kommando"` - Exekverar ett kommando innan något annat i skriptet.
  • `-d` - Aktiverar diagnostisk utmatning.
  • `-i` - Startar interaktivt läge.
  • `-N` - Förhindrar laddning av konfigurationsfiler.
  • `-n` - Förhindrar laddning av användarens `.expect.rc`-fil.

Kommandon

Expect använder Tcl som sitt skriptspråk och inkluderar kommandon för att hantera interaktiva sessioner.

  • `spawn <program>` - Startar ett nytt program för interaktion.
  • `expect <mönster>` - Väntar på att en viss utmatning ska visas.
  • `send "text"` - Skickar text till det startade programmet.
  • `interact` - Ger användaren kontroll över sessionen.
  • `exp_continue` - Fortsätter matchning av fler mönster efter en träff.
  • `expect_user` - Väntar på input från användaren.
  • `log_file <fil>` - Loggar sessionens utmatning till en fil.

Exempel

Ett enkelt Expect-skript för att automatisera en SSH-inloggning:

#!/usr/bin/expect -f
spawn ssh användare@server
expect "password:"
send "mittlösenord\r"
interact

Buggar

Några kända problem:

  • Vissa system kan ha problem med pty-tilldelning.
  • Terminalinställningar kan påverka hur Expect tolkar utmatning.
  • Förväntade mönster kan påverkas av terminalens buffert och outputhantering.

Se även

  • `Tcl(3)`, `libexpect(3)`
  • "Exploring Expect" av Don Libes

Författare

Don Libes, National Institute of Standards and Technology (NIST)

Exempel på användning av expect(1)

1. Automatisera SSH-inloggning

Detta skript loggar in på en fjärrserver via SSH och kör ett kommando.

#!/usr/bin/expect -f

set timeout 10
spawn ssh användare@exempel.com
expect "password:"
send "mittlösenord\r"
expect "$ "
send "ls -l\r"
expect "$ "
send "exit\r"

2. Automatisk filöverföring med SCP

Detta skript skickar en fil till en fjärrserver utan att manuellt ange lösenordet.

#!/usr/bin/expect -f

set timeout 10
spawn scp fil.txt användare@exempel.com:/destination/
expect "password:"
send "mittlösenord\r"
expect eof

3. Automatiskt svara på en interaktiv terminalprompt

Detta skript svarar automatiskt på en fråga från ett interaktivt program.

#!/usr/bin/expect -f

spawn program
expect "Vill du fortsätta? (ja/nej)"
send "ja\r"
expect eof

4. Vänta på en specifik utdata och skicka svar

Detta skript kör ett kommando och väntar på en specifik utdata innan det skickar ett svar.

#!/usr/bin/expect -f

spawn telnet server.exempel.com
expect "login:"
send "användare\r"
expect "Password:"
send "hemligtlösenord\r"
expect ">"
send "help\r"
expect ">"
send "exit\r"

5. Automatisk kompilering och hantering av frågor

Detta skript automatiserar en kompilering och hanterar eventuella bekräftelsefrågor.

#!/usr/bin/expect -f

spawn make install
expect {
    "Do you want to continue? (y/n)" { send "y\r"; exp_continue }
    eof
}

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man1/expect.1.html


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorreparation som har sponsrat Linux.se med webbhotell.