Bashスクリプト内でExpectを使用するbashスクリプトがあります。この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}'