gpt4 book ai didi

bash - 如何在 Expect 条件语句中使用 Bash 脚本变量

转载 作者:行者123 更新时间:2023-11-29 09:02:10 24 4
gpt4 key购买 nike

我正在编写 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 0log_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com