我正在编写一个Bash脚本,并使用Expect进行sftp。现在在Expect块中,我想在条件语句中访问Bash变量,但是我无法做到。我该怎么做?
此外,这个脚本的执行是通过一个C程序控制的,我想将输出重定向到一个日志文件(再次是动态的)。我能做到这一点并抑制所有标准输出吗?
以下是代码:
!/usr/bin/bash
host=$1
user=$2
pass=$3
action=$4
path=$5
echo "Starting...."
function doAction {
strAction="\""$action"\""
echo $strAction
/usr/bin/expect <<EOF > logfile.txt
**set bashaction $strAction**
spawn sftp $user@$host
expect "password:"
send "$pass\r"
expect"sftp>"
send "cd $path\r"
**if {$bashaction == "TEST"} {**
expect "sftp>"
send "prompt\r"
}
expect "sftp>"
send <sftp command>
expect "sftp>"
send_user "quit\n"
exit
EOF
}
doAction
echo "DONE....."
使用Expect脚本代替可以解决第一个问题。对于日志问题,使用log_user 0
和log_file -a <file>
可以解决。