我的问题与How to pass variables from a shell script to an expect script?
有关但略有不同:
除了传递两个运行时shell脚本变量之外,我想在shell脚本中传递一个变量,例如:
#!/bin/sh
d=`date '+%Y%m%d_%H%M'`
expect -c '
expect "sftp>"
#use $d here(how?)
'
答案 0 :(得分:3)
您无需将日期变量传递给expect。它内置了一个非常好的日期命令:
expect -c '
# ...
set d [timestamp -format "%Y%m%d_%H%M"]
something_with $d
# ...
'
如果您需要进行更复杂的日期操作,请阅读Tcl clock命令
将shell变量传递给期望的另一个好方法是(不必进行复杂/杂乱的引用/转义)是使用环境:导出shell变量,然后使用expect的全局env
数组访问它们: / p>
export d=$(date ...)
expect -c 'puts "the date is $env(d)"'
答案 1 :(得分:2)
这似乎是错误的做事方式。你应该设置SSH密钥(使用ssh-keygen和ssh-copy-id),谷歌关于此。
无论如何,试试这个:
#!/bin/sh
d=`date '+%Y%m%d_%H%M'`
expect -c "
something_with $d"
请注意双引号而不是单引号。
"双引号"每个包含空格/元字符和每个扩展的文字:" $ var"," $(命令" $ var")", " $ {array [@]}"," a& B&#34 ;.使用"单引号'代码或文字$'费用$ 5 US',ssh host' echo" $ HOSTNAME"'。请参阅http://mywiki.wooledge.org/Quotes,http://mywiki.wooledge.org/Arguments和http://wiki.bash-hackers.org/syntax/words