作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写 Bash 脚本并使用 Expect 执行 sftp。现在在 Expect block 中,我想在条件语句中访问 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....."
对于 1. 使用 Expect 脚本反而有效。对于日志记录问题,使用 log_user 0
和 log_file -a <file>
有帮助。
最佳答案
您不需要使用 Bash。 Expect 可以处理所有这些:
#!/usr/bin/expect
set host [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set action [lindex $argv 3]
set path [lindex $argv 4]
puts "Starting...."
puts "\"$action\""
spawn sftp $user@$host
expect "password:"
send "$pass\r"
expect"sftp>"
send "cd $path\r"
if {$action == "TEST"} {
# Do something
} else {
# Do something else
}
expect "sftp>"
send_user "quit\r"
puts "DONE....."
来自 Bash,Tcl/Expect 语法有点奇怪,但扩展上述框架应该没有问题。
关于bash - 如何在 Expect 条件语句中使用 Bash 脚本变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131318/
我是一名优秀的程序员,十分优秀!