Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
remzi-arpacidusseau
GitHub Repository: remzi-arpacidusseau/ostep-projects
Path: blob/master/tester/run-xv6-command.exp
909 views
#! /usr/bin/env expect

proc shutdown {} {
    # send command to halt qemu (ctrl-a x)
    # https://stackoverflow.com/questions/27050473/how-to-send-ctrl-a-then-d-in-expect
    send "\x01"; send "x"
    # make sure to wait for it all to stop
    # (without this, script was terminating before qemu quit -> bad)
    expect eof
}

# turn off timeout (perhaps make this flexible later)
set timeout -1

# build and launch xv6 on qemu
spawn make [lindex $argv 0] -f [lindex $argv 1] qemu-nox

trap {
    shutdown
    exit 0
} SIGINT

# wait for initial prompt
expect "init: starting sh\r"
expect "$ "

# send command as per command line
send "[lindex $argv 2]\r"

# wait for it to be done
expect "$ "

# shutdown qemu properly (avoid runaways)
shutdown