【问题标题】:How to run a applescript to enter a terminal command如何运行applescript以输入终端命令
【发布时间】:2013-12-08 21:53:14
【问题描述】:

我一直在玩弄语音命令,但遇到了障碍。我试图让终端命令运行,但它不工作。该命令使星号“雪”下降。 这是我目前所拥有的。

tell application "Terminal"
activate
run script "ruby -e 'C=`stty size`.scan(/\d+/)[1].to_i;S=["2743".to_i(16)].pack("U*");a={};puts "\033[2J";loop{a[rand(C)]=0;a.each{|x,o|;a[x]+=1;print "\033[#{o};#{x}H \033[#{a[x]};#{x}H#{S} \033[0;0H"};$stdout.flush;sleep 0.1}'"
end tell

我得到的只是错误

【问题讨论】:

    标签: command-line terminal applescript


    【解决方案1】:

    使用do shell script 命令执行的命令行脚本。字符串转义可能会有点粗糙,所以也要小心。这是一个简单的例子:

    do shell script "say \"Today is `php -r \"echo date('l');\"`\""
    

    编辑:

    好的,我刚刚意识到您的脚本实际上依赖于在终端窗口中运行,所以do shell script 的常用方法在这里不起作用。

    您的 Applescript 中仍有很多未转义的引号,但我认为与其修复这些引号,不如将整个 ruby​​ 脚本放入一个独立文件并将其传递给终端会更容易。

    stars.rb

    #!/usr/bin/ruby
    
    C=`stty size`.scan(/\d+/)[1].to_i;
    S=["2743".to_i(16)].pack("U*");
    a={};
    puts "\033[2J";
    loop {
      a[rand(C)]=0;
      a.each {
        |x,o|;
        a[x]+=1;
        print "\033[#{o};#{x}H \033[#{a[x]};#{x}H#{S} \033[0;0H"
      };
      $stdout.flush;
      sleep 0.1
    }
    

    AppleScript

    tell application "Terminal"
       activate
       do script "~/stars.rb"
    end tell
    

    【讨论】:

    • 非常感谢,但由于某种原因,我要运行的脚本仍然给我错误,但它在终端中运行良好。
    • 我已经编辑了我的答案——请看一下,如果有帮助,请告诉我。
    • 啊哈!一直以来,我一直将它们发送到 Finder。谢谢你——我会编辑我的答案。
    【解决方案2】:

    为 AppleScript 转义 shell 命令的一种简单方法是将命令保存在文本文件中。运行下面的脚本并复制结果。

    set myText to read (choose file) as «class utf8»
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多