Answers:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
这将打开一个新终端,并在其中执行命令“ echo hello”。
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
在shell中但在osa脚本中传递参数?
您可以通过回旋方式来做到这一点:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
.command
可以双击具有扩展名且可执行的Shell脚本,以在新的Terminal窗口中运行。open
您可能已经知道,该命令等效于双击Finder对象,因此此过程最终在新的Terminal窗口中的脚本中运行命令。
略微扭曲,但确实起作用。我确信必须有一条更直接的路线(您实际上想做什么?),但它现在使我不知所措。
#!/usr/bin/env ruby1.9
require 'shellwords'
require 'appscript'
class Terminal
include Appscript
attr_reader :terminal, :current_window
def initialize
@terminal = app('Terminal')
@current_window = terminal.windows.first
yield self
end
def tab(dir, command = nil)
app('System Events').application_processes['Terminal.app'].keystroke('t', :using => :command_down)
cd_and_run dir, command
end
def cd_and_run(dir, command = nil)
run "clear; cd #{dir.shellescape}"
run command
end
def run(command)
command = command.shelljoin if command.is_a?(Array)
if command && !command.empty?
terminal.do_script(command, :in => current_window.tabs.last)
end
end
end
Terminal.new do |t|
t.tab Dir.pwd, ARGV.length == 1 ? ARGV.first : ARGV
end
您需要ruby 1.9,或者您需要require 'rubygems'
在其他用户之前添加行,并且不要忘记安装gem rb-appscript
。
我将此脚本命名为“ dt
dup”选项卡,因此我可以运行dt
以在同一文件夹中打开选项卡,dt ls
也可以在其中运行ls
命令。
我会用AppleScript做到这一点。您可以使用osascript命令简化它。您的脚本将类似于:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
如果只打算在终端中访问它,则可以忽略除中间的tell语句外的所有内容。如果要一个新窗口而不是一个新选项卡,请用n替换t按键。
我还没有足够的经验丰富的AppleScripter知道如何获取命令行参数,然后在新窗口中重新输入它们,但是我敢肯定这是可能的,而且不太困难。
另外,我认为这可行,并且目前无法测试,但是我敢肯定,您可以在#!/ usr / bin / osascript -e上启动带有某些变体的shell脚本,然后将其另存为可执行文件随你怎么便。至少在我看来,这使您可以键入$ runinnewterm ls / Applications之类的东西