Linux bash脚本中的Expect命令
使用bash变量执行expect命令时遇到问题。我有脚本的参数给出的位置,我需要通过expect-c在send命令中使用它。但我需要用“所以实际上send命令认为我已经结束了键入,并且在结束引号后将命令的其余部分识别为额外字符。事情如下所示:Linux bash脚本中的Expect命令,linux,bash,shell,ssh,expect,Linux,Bash,Shell,Ssh,Expect,使用bash变量执行expect命令时遇到问题。我有脚本的参数给出的位置,我需要通过expect-c在send命令中使用它。但我需要用“所以实际上send命令认为我已经结束了键入,并且在结束引号后将命令的其余部分识别为额外字符。事情如下所示: #!/bin/bash SIGN=ppp expect -cd 'spawn ssh user@host expect "Password:" send -- "pass\r" e
#!/bin/bash
SIGN=ppp
expect -cd 'spawn ssh user@host
expect "Password:"
send -- "pass\r"
expect "*~>"
send -- "find /local/"$SIGN"/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
expect "*~>"
send -- "exit\r"'
你知道如何在没有双引号的情况下将变量从bash发送到expect吗?顺便说一句,我不能使用ssh的键如果简单地删除“s around
$符号
,会发生什么
send--“find/local/$SIGN/-maxdepth 1-类型d-mtime+30 | xargs rm-rfv\r”
或者尝试在其周围使用{}
send--“find/local/${SIGN}/-maxdepth 1-type d-mtime+30 | xargs rm-rfv\r”
您可以像那样转义“$SIGN”
:
例:
您可以将该变量放入环境中:
export SIGN=ppp
expect -cd '
spawn ssh user@host
expect "Password:"
send -- "pass\r"
expect "*~>"
send -- "find /local/$env(SIGN)/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
# ...................^^^^^^^^^^
expect "*~>"
send -- "exit\r"
'
我又遇到了一个问题:send--“find/local/”“$SIGN”/-maxdepth 1-type d-mtime+30“grep-v'$FILTER”“| xargs rm-rfv\r”此命令未执行。至少它正确地放置了变量值。但通过xargs向rm发送文件夹列表可能会有问题?若并没有它,它不会将其视为变量:无法读取“符号”:并没有这样的变量。{}怪异也是如此。我想这是因为它在第一行的
'
内。可以将它们作为一些expect命令发送吗。每行一个,跳过一个?我相信有更好的方法,但那是我想开始的地方,我实际上不明白。一些expect命令?它不会中断ssh会话吗?你能给我一个提示吗?:)实际上我对expect一点也不熟悉我也不熟悉expect。我只是在看bash语法。我认为问题在于使用单引号来包含整个字符串。看看这个链接。不确定答案是什么,但我认为如果”
export SIGN=ppp
expect -cd '
spawn ssh user@host
expect "Password:"
send -- "pass\r"
expect "*~>"
send -- "find /local/$env(SIGN)/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
# ...................^^^^^^^^^^
expect "*~>"
send -- "exit\r"
'