我目前有以下自动 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"
本质上,我有一个两步的登录过程。首先是密码(有效),其次是身份验证(无效)。
每次我到达 sed 部分时,它都会返回:
can't read "(sed -n '/^secret=/s///p' ~/.Auth.sc)": no such variable
while executing
我不知道该怎么做,但高度怀疑与反斜杠和转义它们有关。我走在正确的轨道上吗?
答案1
在 中Tcl
,[...]
相当于$(...)
,因此您应该将代码编写为:
send "/usr/local/bin/authtool --totp --base32 [exec sed -n '/^secret=/s///p' $::env(HOME)/.Auth.sc]\r"
答案2
尝试这个 ,
基本上在expect
脚本中,在这部分代码中:
send "/usr/local/bin/authtool --totp --base32 $(sed -n '/^secret=/s///p' ~/.Auth.sc)\r"
它被$(sed -n '/^secret=/s///p' ~/.Auth.sc)
视为期望变量,但事实上并非如此。
所以尝试这样做,即逃避$
(
)
send "/usr/local/bin/authtool --totp --base32 \$\(sed -n '/^secret=/s///p' ~/.Auth.sc\)\r"
或者尝试使用反引号。
send "/usr/local/bin/authtool --totp --base32 `sed -n '/^secret=/s///p' ~/.Auth.sc`\r"