我一直在搞乱语音命令,但遇到了麻烦。我试图让终端命令运行,但它无法正常工作。该命令使星号“雪”下降。 这是我到目前为止所做的。
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
我得到的只是错误
答案 0 :(得分: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
答案 1 :(得分:1)
转义AppleScript的shell命令的简单方法是将命令保存在文本文件中。运行下面的脚本并复制结果。
set myText to read (choose file) as «class utf8»