expect
порождает новый подоболочку, следовательно, ваши местные bash
переменные теряют объем, один из способов достижения этой цели является export
ваших переменных, чтобы сделать его доступным для суб-оболочки. Используйте встроенный файл Tcl env
для импорта таких переменных в ваш скрипт.
#!/bin/bash
export pwdir="test123"
export ip="10.9.8.38"
export user=$1
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no "$env(user)"@"$env(ip)" df -h
expect "*assword:"
send "$env(pwdir)\n"
interact
EOD
(или) Если вы не заинтересованы в использовании expect
сценария непосредственно с #!/usr/bin/expect
она-бэнгом, вы можете сделать что-то вроде
#!/usr/bin/expect
set pwdir [lindex $argv 0];
set ip [lindex $argv 1];
set user [lindex $argv 2];
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected]$ip df -h
expect "*assword:"
send "$pwdir\n"
interact
и запустить скрипт как
./script.exp "test123" "10.9.8.38" "johndoe"
Надеюсь, это поможет: http://www.thegeekstuff.com/2010/10/expect-examples/ – OscarAkaElvis