如何将默认值应用于所有期望命令?

How to apply default to all expect commands?

使用 expect 编写 CLI 单元测试,并希望抽象以下 default 块,因为它适用于所有 expect 块。

default {
  test_failed
}

示例:

#!/usr/bin/expect

source ./test.exp

set passphrase "asdasd"
set secret "foo\nbar"

test_label "Should backup secret using Shamir Secret Sharing"

spawn qr-backup.sh --shamir-secret-sharing

expect {
  default {
    test_failed
  }
  -re {Format USB flash drive \(y or n\)\?} {
    sleep 0.1
    send "n\r"
  }
}

expect {
  default {
    test_failed
  }
  -re {\[sudo\] password for pi:} {
    sleep 0.1
    send "$env(password)\r"
  }
}

这正是 expect_beforeexpect_after 命令的作用。在这种情况下,使用哪一个都没有关系:

#!/usr/bin/expect

spawn qr-backup.sh --shamir-secret-sharing

expect_after {
    default {
        test_failed
    }
}

expect {
    -ex {Format USB flash drive (y or n)? } {
        send "n\r"
    }
}

expect {
    -ex {[sudo] password for pi: } {
        send "$env(password)\r"
    }
}