我如何 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 退出。
我有一个 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 退出。