如何运行applescript来输入终端命令

时间:2013-12-08 21:53:14

标签: command-line terminal 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

我得到的只是错误

2 个答案:

答案 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»