我想在expect文件中设置一个变量b,这里最初我通过这个脚本ssh到一台机器,在那台机器上我想要获取一个值并使用以下命令设置expect变量:
set b [exec `cat /home/a |grep "work"|awk -F '=' '{print $2}'`]
send_user "$b"
file / home / a有以下结构:
home=10.10.10.1
work=10.20.10.1
我打算在打印后使用变量b 但在做了ssh脚本后,它给出了:
无法读取“2”:没有这样的变量
while executing
如果我将此输出放在该机器的文件名temp中并尝试执行:
设置b [exec cat ./temp]
然后它也给出了:
cat:./ temp:没有这样的文件或目录
如果我发送“cat ./temp”,它会输出正确的输出。
请让我知道我哪里出错。
答案 0 :(得分:6)
单引号不引用Tcl
的机制,因此支持awk
表达式。
% set b [exec cat /home/a | grep "work" | awk -F {=} {{print $2}}]
10.20.10.1
答案 1 :(得分:3)
假设您产生了ssh会话或类似内容,send "cat ./temp\r"
会向您显示远程主机上的文件,而exec cat ./temp
会向您显示上的文件本地主机。 exec
是一个简单的Tcl命令。
捕获send
命令的命令输出有点像PITA,因为你必须从输出中解析实际命令和下一个提示。您需要执行以下操作:
# don't need 3 commands when 1 can do all the work
send {awk -F= '/work/ {print $2}' /home/a}
send "\r"
expect -re "awk\[^\n]+\n(.+)\r\n$PROMPT" # where "$PROMPT" is a regex that
# matches your shell prompt.
set command_output $expect_out(1,string)
send_user "$command_output\n"