解析 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}'

相關內容