代码之家  ›  专栏  ›  技术社区  ›  Decent Dabbler

Bash:open命令的管道参数失败。打开命令执行得太早?

  •  1
  • Decent Dabbler  · 技术社区  · 15 年前

    open 命令输入 bash

    我的最终目标是从TextWrangler编译一个Flex/Actionscript应用程序,方法是用一点Applescript调用bash脚本,并在Flash播放器中直接播放结果。Applescript基本上是在做它的工作。但是bash脚本并不像我期望的那样工作。当我操作Applescript并直接将其放入终端时,也会得到相同的结果。

    mxmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//' | open -a 'Flash Player'
    

    所以基本上,我读了 mxmlc ,通常是这样的:

    /Users/fireeyedboy/Desktop/DocumentClass.swf (994 bytes)
    

    我在它遇到第一个空间后就把所有的东西都剥掉了。我知道这还不是防弹的,它仍然只是一个概念的证明。当我把这个粗略的工作,我会完善。它返回到目前为止所需的结果:

    /Users/fireeyedboy/Desktop/DocumentClass.swf
    

    但正如你所看到的,我试着用管道 sed 结果到Flash播放器,这就是它失败的地方。Flash播放器似乎开得太早了。我希望Flash播放器只能在脚本完成后打开 塞德 命令。但它的开放早得多。

    所以我的问题有两个:

    1. 有没有可能用管道 怎么了?
    2. 我需要用打字机吗 得到这个命令的延迟时间 工作,自从 命令似乎没有等待输入?
    3 回复  |  直到 15 年前
        1
  •  3
  •   Joachim Sauer    15 年前

    你想说出 swf open 它不支持的命令。

    它需要文件名作为参数(类似于 -a ).

    你可以这样做:

    FILENAME=`xmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//'`
    open -a 'Flash Player' $FILENAME
    

    或者在一行上:

    open -a 'Flash Player' `xmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//'`
    

    bash (或者另一个现代的POSIX shell),您可以用 $( ) :

    open -a 'Flash Player' $(xmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//')
    
        2
  •  2
  •   Aaron Digulla    15 年前

    我猜是这样的 open -a 'Flash Player' 不等待输入,只需启动flash播放器。我建议试着用一个论据来运行玩家:

    name=$(mxmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//')
    open -a 'Flash Player' "$name"
    
        3
  •  1
  •   static_rtti    15 年前

    我不熟悉“open”命令,因为它似乎是mac的东西,但我 认为 您要做的是:

    open -a 'Flash Player' $(mxmlc -warnings=false DocumentClass.as | tail -n 1 | sed 's/[[:space:]].*$//')
    

    一般来说,不能将参数通过管道传输到命令,必须指定要将前一个命令的输出视为参数,如我的示例或 xargs 命令。但是请注意,命令行的最大大小是有限制的。

    推荐文章