如何传递本地shell脚本变量?

时间:2014-12-09 21:25:32

标签: linux bash shell expect

我的问题与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?)
'

2 个答案:

答案 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/Quoteshttp://mywiki.wooledge.org/Argumentshttp://wiki.bash-hackers.org/syntax/words