解析 Expect 变量的输出并在 bash 脚本中使用它

解析 Expect 变量的输出并在 bash 脚本中使用它

我有一个 bash 脚本,它在 bash 脚本中使用了 Expect 。该 bash 脚本将在脚本的期望部分提示输入密码,然后返回一些输出。我想获取该输出并解析它,以便它只向我显示输出的一部分并将其存储在普通 bash 脚本可以使用的变量中。我的脚本是:

#!/bin/sh

output=$(
/usr/bin/expect << EOF
spawn -noecho generate passcode -a 123456789
expect "passphrase:" { send "password\n" }
expect eof
EOF
#)
) | awk '/^ [a-zA-Z]*: (\S+)/'

echo $output

我在没有 awk 正则表达式的情况下得到的输出是: Passcode: 543245324532455464 我的正则表达式将解析输出并仅将543245324532455464值存储在输出变量中。这正是我所希望的。如果我将 附加| awk '/^ [a-zA-Z]*: (\S+)/'到命令末尾,它不会返回任何内容,只是空白。如果我把它取下来,它会返回我期望的输出。

谁能告诉我如何将正确的数据存储到 bash 中的变量中?

答案1

正如所写,您捕获 /usr/bin/expect 的输出,然后将任何内容传输到 awk - 命令替换的右括号需要位于管道的末尾

不是

... ) | awk '/^ [a-zA-Z]*: (\S+)/'

... | awk '/^ [a-zA-Z]*: (\S+)/')

请注意,这\S是非标准的(PCRE),并且可能并非所有版本的 awk 都支持,并且捕获组可能不会产生任何效果 - 您可能会做得更好,例如

awk -F': ' '$1 ~ /Passcode/ {print $2}'

相关内容