我一直在尝试自动化在构建计算机上构建源代码的复杂过程,然后将已编译的图像文件传输到我的嵌入式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”变量?或者,是否有一些切割方法来解决这个限制而不删除变量?
非常感谢所有帮助。
答案 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
希望这会有所帮助。