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
引用符についてだと思います。expect-c"を一重引用符expect-c'に変更すると、スクリプト内の変数であるため、今回は$SSH_KEY_PATH_PUBが見つからないというエラーが発生します。 。解決策は何ですか
編集:OK今回は一重引用符を使用する方が良いですが、それは機能します。しかし、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
')
今回は、パスがOKの場合はジョブを実行し、パスが正しくない場合は失敗します。ただし、パスが正しい場合は、「間違ったパス」ステージが書き込まれます。パスが正しければ、終了して続行しないようにする必要があります。申し訳ありませんが、expectとその構文に精通していません。