Ваш bash-скрипт будет вызывать ожидаемый сценарий следующим образом:
expect script.exp "$username" "$password" "$hostname"
И ожидаемый сценарий будет запускаться следующим образом:
#!/bin/expect
lassign $argv username password hostname
# or if your version of expect is old and does not have "lassign"
# foreach {username password hostname} $argv break
# or, if you prefer
# set username [lindex $argv 0]
# set password [lindex $argv 1]
# set hostname [lindex $argv 2]
spawn ssh -o StrictHostKeyChecking=no $username@$hostname
# etc etc
Символ @
не имеет специального значения,таким образом, он не нуждается в экранировании.
При вышеупомянутом подходе существует угроза безопасности: во время работы ожидаемого кода на выходе ps
будет показан пароль.
Youможет поделиться паролем через окружение:
bash
export username password hostname
expect script.exp
Ожидается
spawn ssh -o StrictHostKeyChecking=no $env(username)@$env(hostname)
# etc etc