代码之家  ›  专栏  ›  技术社区  ›  Vahagn

如何从tcl脚本调用bash命令?

  •  5
  • Vahagn  · 技术社区  · 14 年前

    % ls
    

    而不是

    $ exec ls
    

    exec ).

    如何使tclsh在解释tcl脚本文件时识别bash命令,就像在交互式会话中一样?

    3 回复  |  直到 12 年前
        1
  •  7
  •   SingleNegationElimination    14 年前

    这里发生的事是 unknown proc在您键入如下命令时被调用 ls

    为了在这方面有一个好的开始,请检查

    info body unknown
    
        2
  •  10
  •   Donal Fellows    14 年前

    如果你想拥有 脚本中可用的实用程序,编写桥接过程:

    proc ls args {
        exec {*}[auto_execok ls] {*}$args
    }
    

    这甚至适用于大多数shell内置或Windows。(公平地说,你通常不想使用外部 ls glob 命令通常就足够了,有时需要一些人的额外帮助 file 子命令)有些命令需要做更多的工作(例如,重定向输入,使其来自终端,并附加 <@stdin </dev/tty ;这是需要的 stty

    然而,如果您所要求的是任意执行外部程序,而不需要任何额外的代码来标记它们是外部的,那么这被认为是违背Tcl的精神的。问题是,这使得代码很难维护;不明显的是,你在做一个昂贵的调用,而不是使用(相对)便宜的内部调用。放入 exec 在那种情况下不是 那个

        3
  •  4
  •   Dennis Williamson    14 年前

    有件事你应该知道 ls 不是Bash命令。它是一个独立的实用程序。tclsh如何运行这些实用程序的线索就在它的名称中- sh exec .