【问题标题】:Passing parameters to shell script from IDL script从 IDL 脚本向 shell 脚本传递参数
【发布时间】:2016-07-31 19:58:34
【问题描述】:

我正在尝试编写名为 a.pro 的 IDL 脚本。在这个脚本的最后,我想执行 shell 脚本 b。我正在尝试使用 spawn 命令来做到这一点。但我还需要从 IDL 脚本向这个 shell 脚本传递一些参数(变量值)。我怎样才能做到这一点?

【问题讨论】:

  • 您可以在字符串上使用EXECUTE 函数并以这种方式传递变量。
  • idl 标签用于接口描述语言。

标签: shell spawn idl-programming-language


【解决方案1】:

您发送给SPAWN 的命令只是一个字符串;以您喜欢的任何方式创建字符串。我更喜欢使用 C 风格的格式代码:

filename = 'output.log'
n_lines = 50
cmd = string(n_lines, filename, format='(%"tail -%d %s")')
; cmd = 'tail -50 output.log'
spawn, cmd, output

【讨论】:

    【解决方案2】:

    有两种方法可以调用SPAWN来完成你想要的:


    直接调用脚本b

    spawn, ['b', arg1, arg2], /noshell
    

    优点:

    • 更快,因为它不会创建 bash 的新实例。
    • 更安全,因为您不必转义或引用参数。

    格式化为bash 终端字符串:

    script_path = 'b'
    cmd = strjoin([script_path, arg1, arg2], ' ')
    spawn, cmd
    

    优点:

    • 有时更容易,因为您可以使用您习惯于从bash 看到的格式。

    在大多数情况下,您应该直接使用spawn, /noshell 调用脚本和其他程序(IDL 除外),因为速度提升很大,而且安全性可能相当大。

    【讨论】: