2013-12-08 185 views
0

我一直在使用语音命令,但遇到了一个障碍。我试图让一个终端命令运行,但它不工作。该命令使星号“雪”下降。 这是我到目前为止。如何运行一个applescript来输入一个终端命令

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 

我得到的是与do shell script命令执行错误

回答

1

命令行脚本。字符串转义可能会有点粗糙,所以请小心。这里有一个简单的例子:

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

编辑:

OK,我才意识到你的脚本实际上取决于有一个终端窗口中运行,所以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 
+0

非常感谢,但由于某种原因,我想运行的脚本仍然给我错误,但它在终端中运行良好。 – Wolfcheck

+0

我编辑了我的答案 - 请看一看,并告诉我是否有帮助。 –

+1

啊哈!而这一次我一直把它们发送给Finder。谢谢你 - 我会编辑我的答案。 –

1

一个简单的方法来逃避AppleScript的shell命令是在文本文件中保存的命令。运行下面的脚本并复制结果。

set myText to read (choose file) as «class utf8» 
相关问题