【问题标题】:Is there a way to use Expect-Lite variables inside of a spawned command?有没有办法在生成的命令中使用 Expect-Lite 变量?
【发布时间】:2015-09-10 11:26:30
【问题描述】:

我一直致力于尝试将在构建机器上构建源代码的复杂过程自动化,然后将编译后的图像文件传输到我的嵌入式 ARMv7 设备以进行闪存。使用标准的 Linux Shell 脚本,每一步本身都很容易自动化,但是当试图在一个巨大的脚本中完成所有事情时,事情就变得复杂了。到目前为止,我一直在使用 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”变量?或者,是否有一些更巧妙的方法可以在不删除变量的情况下绕过这个限制?

非常感谢所有帮助。

【问题讨论】:

    标签: sftp expect


    【解决方案1】:

    修真者,

    不存在范围问题。 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 的作者和维护者

    【讨论】:

      【解决方案2】:

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

      >sftp $userName'@'$buildMachine
      >$password
      
      $imageDestination="/the/destination"
      $imageSource="/the/source/"
      
      >get $imageSource'/'x-load_sdcard.bin.ift $imageDestination'/'MLO
      
      >echo "Finished"
      >bye
      

      希望这对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2020-05-12
        • 2017-05-15
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 2015-06-07
        • 2011-12-05
        • 1970-01-01
        相关资源
        最近更新 更多