set timeout 20
spawn /usr/kerberos/bin/kinit -r 30d user@KTDOMAIN
expect "Password for workuser@KTDOMAIN:" { send "password\n" }
interact
скрипт получает тикет от Active Directory, очень важна строка "set timeout 30" (например задержки в 20 секунд не хватает поэтому нужно проверять хватает ли времени) - скрипт не будет без нее работать в crontab.
если в скрипте не только еxpect, то есть есть еще куча команд (использовал источник
http://stackoverflow.com/questions/10393848/using-expect-in-bash-script)
#!/bin/bash
cd /var/www/domains/bridge.com/
echo "Updating Source start"
expect <<- DONE
set timeout -1
spawn git pull
expect "*?assword:*"
send -- "b15\r"
send -- "\r"
expect eof
DONE
echo "Updating Source done"
ясное дело если есть переменные (смотрим вышеприведенный источник нужно писать в начале скрипта #!/usr/bin/env bash)
но если сессия должна остаться и вы будете дальше что-то вводить (interact), то конечно нужно использовать конструкции вроде (источник http://blog.omnidarren.com/2011/04/quick-and-dirty-telnet-script-for-switches-in-bash/)
#!/bin/bash
(expect -c "
set timeout 20
spawn /usr/bin/telnet $1
expect \"Username:\"
send \"user\r\"
expect \"Password:\"
send \"pass\r\"
expect \">\"
send \"enable\r\"
expect \"Password:\"
send \"pass_en\r\"
interact
exit
")
Комментариев нет:
Отправить комментарий