VAR=$(expect -c "
spawn ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP
expect "*?assword:*"
send \"$REMOTE_HOST_PASSWD\r\";
send -- "\r"
expect eof
")
#echo "$VAR"
代码在我的 bash 脚本中的一个函数中工作。当密码错误时我需要一个异常。我的方法是;
VAR=$(expect -c "
spawn ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP
expect "*?assword:*"
send \"$REMOTE_HOST_PASSWD\r\";
expect "Permission denied, please try again."
send user "Wrong pass"
exit
send -- "\r"
expect eof
")
#echo "$VAR"
但它给出了错误
couldn't read file "denied,": no such file or directory
我认为这是关于引用。当我将期望 -c " 更改为单引号期望 -c ' 时,这一次它给出了找不到 $SSH_KEY_PATH_PUB 的错误,因为它是脚本中的一个变量。所以我认为它超出了范围。解决办法是什么
编辑:好的,这次最好使用单引号并且它可以工作。但是 if 子句可以做什么;
AR=$(expect -c '
spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP"'
expect "*?assword:*"
send "'"$REMOTE_HOST_PASSWD"'\r";
expect "Permission denied, please try again."
send user "Wrong pass"
exit
send -- "\r"
expect eof
')
这一次,如果通过是好的,它会成功,如果通过不正确,它不会。但是当通行证正确时,它会写入“错误通行证”阶段。它可以做什么所以如果通过正确它必须退出而不是继续。对不起我不熟悉期望及其语法