我如何 return 预期 bash 中的错误?

How can I return an error in bash expect?

我有一个 bash expect 这样的脚本,用于 Jamf 的一些操作:

spawn firmwarepasswd -setpasswd 
expect { 
    "Enter password:" { 
        send "$oldpass\r" 
        exp_continue 
    }
    "Enter new password:" { 
        send "$newpass\r" 
        exp_continue
    } 
    "Re-enter new password:" { 
    send "$newpass\r"
    exp_continue
    }
}

如果密码失败,脚本将不会退出,jamf 将继续尝试执行它。怎么弄到return密码错误就退出?

我不知道 Jamf,但我确实有一个小例子给你:

function _cmd {
        local cmd="${@?No command?}"
        echo -ne "Testing $cmd\t: "
        expect 2>&1 <<-EOF
                set timeout -1
                spawn ${cmd}
                expect eof
                catch wait result
                exit [lindex $result 3]
EOF     
        echo $?
}

function _ssh {
        local status="${@?No command?}"
        read -sp "remote password? " remote_pass
        echo -ne "\nTesting ssh\t: "
        expect 2>&1 <<-EOF
                set timeout -1
                spawn ssh $USER@127.0.0.1
                expect {
                        "yes/no" { send "yes\r"; exp_continue }
                        "*password: " { send "${remote_pass}\r" }
                }
                expect "*#" { send "exit $status\r" }
                expect eof
                catch wait result
                exit [lindex $result 3]
EOF
echo $?
}

_cmd false
_cmd true
_ssh 3

exit 0

expect eof 之后的最后一部分确保共享退出状态。 _ssh 命令将以状态 3 退出。