여러 호스트에 로그인해야 합니다. 이 스크립트 배열이나 목록에 호스트 이름 변수를 추가하는 방법을 결정할 수 없습니다. 누구든지 제안할 수 있나요?
두 번째는 이 스크립트를 실행하는 동안 오류가 발생한다는 것입니다.
#!/usr/bin/env expect
set timeout 12
set date [exec date "+%d-%B-%Y"]
spawn sh -c "cd /backup/"
for ((i=0;i<8;i++))
do
spawn sh -c "ssh host001n < ./backup.py > /backup/dbbackup-$file-$date.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "pass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "pass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "pass\r"
expect "Password:"
send "pass\r"
interact
done
Shebang을 하나만 추가하면 다음 오류가 발생합니다.
spawn sh -c cd /backup/
wrong # args: should be "for start test next command"
while executing
"for ((i=0"
(file "./backup.py" line 14)
답변1
이 시도:
#!/usr/bin/env expect
set timeout 12
set date [timestamp -format "+%d-%B-%Y"] ;# don't need to call out to date
cd /backup ;# use the built-in cd command
# need to use Tcl syntax for the for loop, not shell syntax
for {set i 0} {$i < 8} {incr i} {
spawn sh -c "ssh host001n < ./backup.py > /backup/dbbackup-$file-$date.txt"
# more DRY
expect {
"Enter passphrase for key '/root/.ssh/id_rsa':" {
send "pass\r"
exp_continue
}
"Password:" {send "pass\r"}
eof
}
}