如何使用 shell 命令的输出设置期望变量
how to set an expect variable with output of shell command
我想在 expect 文件中设置一个变量 b,最初我通过这个脚本通过 ssh 连接到一台机器,在那台机器上我想获取一个值并使用以下命令设置 expect 变量:
set b [exec `cat /home/a |grep "work"|awk -F '=' '{print }'`]
send_user "$b"
文件/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" 它会打印正确的输出。
请让我知道哪里出错了。
单引号不是 Tcl
的引用机制,因此请支持您的 awk
表达式。
% set b [exec cat /home/a | grep "work" | awk -F {=} {{print }}]
10.20.10.1
假设您生成了一个 ssh 会话或类似的东西,send "cat ./temp\r"
会向您显示 远程 主机上的文件,exec cat ./temp
会向您显示该文件在 local 主机上。 exec
是一个普通的 Tcl 命令。
捕获 send
命令的命令输出有点像 PITA,因为您必须从输出中解析出实际命令和下一个提示。您需要执行以下操作:
# don't need 3 commands when 1 can do all the work
send {awk -F= '/work/ {print }' /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"
我想在 expect 文件中设置一个变量 b,最初我通过这个脚本通过 ssh 连接到一台机器,在那台机器上我想获取一个值并使用以下命令设置 expect 变量:
set b [exec `cat /home/a |grep "work"|awk -F '=' '{print }'`]
send_user "$b"
文件/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" 它会打印正确的输出。
请让我知道哪里出错了。
单引号不是 Tcl
的引用机制,因此请支持您的 awk
表达式。
% set b [exec cat /home/a | grep "work" | awk -F {=} {{print }}]
10.20.10.1
假设您生成了一个 ssh 会话或类似的东西,send "cat ./temp\r"
会向您显示 远程 主机上的文件,exec cat ./temp
会向您显示该文件在 local 主机上。 exec
是一个普通的 Tcl 命令。
捕获 send
命令的命令输出有点像 PITA,因为您必须从输出中解析出实际命令和下一个提示。您需要执行以下操作:
# don't need 3 commands when 1 can do all the work
send {awk -F= '/work/ {print }' /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"