Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用shell命令的输出设置expect变量_Linux_Bash_Shell_Variables_Expect - Fatal编程技术网

Linux 如何使用shell命令的输出设置expect变量

Linux 如何使用shell命令的输出设置expect变量,linux,bash,shell,variables,expect,Linux,Bash,Shell,Variables,Expect,我想在expect文件中设置一个变量b,首先我通过这个脚本对一台机器进行了ssh,在该机器中,我想获取一个值并使用以下命令设置expect变量: set b [exec `cat /home/a |grep "work"|awk -F '=' '{print $2}'`] send_user "$b" 文件/home/a具有以下结构: home=10.10.10.1 work=10.20.10.1 我试图在打印变量b后使用它 但在完成ssh脚本之后,它给出了: 无法读取“2”:没有此类

我想在expect文件中设置一个变量b,首先我通过这个脚本对一台机器进行了ssh,在该机器中,我想获取一个值并使用以下命令设置expect变量:

set b [exec `cat /home/a |grep "work"|awk -F '=' '{print $2}'`]


send_user "$b"
文件/home/a具有以下结构:

home=10.10.10.1

work=10.20.10.1
我试图在打印变量b后使用它 但在完成ssh脚本之后,它给出了:

无法读取“2”:没有此类变量

while executing
如果我将此输出放在该计算机中的文件名temp中,并尝试执行以下操作:

设置b[执行类别/温度]

然后给出:

类别:./temp:没有这样的文件或目录

如果我发送“cat./temp”,它将打印正确的输出


请告诉我哪里出了问题。

单引号不是
Tcl
的引号机制,所以请准备好
awk
表达式

% set b [exec cat /home/a | grep "work" | awk -F {=} {{print $2}}]
10.20.10.1

参考:

假设您生成了一个ssh会话或类似的东西,
发送“cat./temp\r”
会显示远程主机上的文件,
执行cat./temp
会显示本地主机上的文件
exec
是一个普通的Tcl命令

捕获
send
命令的命令输出有点困难,因为您必须从输出中解析出实际的命令和下一个提示。您需要执行以下操作:

# 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"

如果我使用:set b[exec cat/home/a | grep“work”| awk-F{{{print$2}}]…它在执行时在关闭引号后提供额外字符,如果我放置\“work\”cat:invalid选项--“F”尝试“cat--help”以获取更多信息。执行时