Expectコマンドでsedを使用するときにバックスラッシュを回避する正しい方法は何ですか?

Expectコマンドでsedを使用するときにバックスラッシュを回避する正しい方法は何ですか?

現在、次の自動化されたSSHスクリプトコードがあります。

#!/usr/bin/expect -f

set pw "mypass"
spawn ssh [email protected]

expect "Password:"
send "$pw\r"

expect "Verification code:"
send "/usr/local/bin/authtool --totp --base32 $(sed -n '/^secret=/s///p' ~/.Auth.sc)\r"

デフォルトでは、2段階のログインプロセスがあります。 1つ目はパスワード(動作)、2つ目は認証(動作しません)です。

sed 部分に達するたびに、次が返されます。

can't read "(sed -n '/^secret=/s///p' ~/.Auth.sc)": no such variable
    while executing

どうすればいいのかわかりませんが、バックスラッシュとエスケープ処理に関連していると思われます。私は正しい道を行っていますか?

ベストアンサー1

in はTcl同じな[...]ので、$(...)コードを次のように書く必要があります。

send "/usr/local/bin/authtool --totp --base32 [exec sed -n '/^secret=/s///p' $::env(HOME)/.Auth.sc]\r"

おすすめ記事