2013-12-08 253 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» 
相關問題