有没有办法在生成的命令中使用Expect-Lite变量?

时间:2011-03-26 00:40:27

标签: sftp expect

我一直在尝试自动化在构建计算机上构建源代码的复杂过程,然后将已编译的图像文件传输到我的嵌入式ARMv7设备上进行闪存。每个步骤本身都很容易使用标准的Linux Shell脚本进行自动化,但是当尝试在一个巨大的脚本中执行所有操作时,事情会变得复杂。到目前为止,我一直在使用expect-lite来完成工作,除了现在我遇到了问题。传输图像时,我的expect-lite代码如下所示:

$imageDestination="/the/destination"
$imageSource="/the/source/"

>sftp $userName'@'$buildMachine
>$password

>get $imageSource'/'x-load_sdcard.bin.ift $imageDestination'/'MLO

>echo "Finished"
>bye

如果您对expect-lite有所了解,那么您就会知道上述变量将被视为“Shell”变量。问题是据我所知SFTP不允许使用变量。有没有办法告诉expect-lite使用预定义的变量而不是尝试使用“Shell”变量?或者,是否有一些切割方法来解决这个限制而不删除变量?

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

Dreligor,

没有范围问题。 Expect-lite变量都是全局范围的(如文档中所述)。我认为问题在于你使用引号使事情变得更加困难。你应该试试:

$imageDestination=/the/destination
$imageSource=/the/source

>sftp $userName'@'$buildMachine
>$password

>get $imageSource/x-load_sdcard.bin.ift $imageDestination/MLO

>echo "Finished"
>bye

Craig Miller - expect-lite的作者和维护者

答案 1 :(得分:0)

经过一些实验后发现这是一个范围问题。解决方案是简单地向下移动变量声明。它们需要在脚本通过sftp连接到远程计算机后声明。固定代码如下:

>sftp $userName'@'$buildMachine
>$password

$imageDestination="/the/destination"
$imageSource="/the/source/"

>get $imageSource'/'x-load_sdcard.bin.ift $imageDestination'/'MLO

>echo "Finished"
>bye

希望这会有所帮助。