如何在 bash 期望中返回错误?

问题描述

我有一个像这样的 bash 期望脚本(我在 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 将继续尝试执行它。如果密码错误,如何让它返回 1 并退出

解决方法

我不知道 ungroup,但我有一个小例子给你:

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 命令将以状态 3 退出。