从命令行打开一个新终端并在 Mac OS X 上运行命令?

从命令行打开一个新终端并在 Mac OS X 上运行命令?

有没有办法从命令行打开一个新终端,并在该新终端上运行命令(在 Mac 上)?

例如:

Terminal -e ls

ls在新终端中运行。

答案1

osascript -e 'tell app "Terminal"
    do script "echo hello"
end tell'

这将打开一个新的终端并在其中执行命令“echo hello”。

答案2

一句话很棒

osascript -e 'tell app "Terminal" to do script "cd ~/somewhere"'

链接命令也很棒

osascript -e 'tell app "Terminal" to do script "cd ~/somewhere &&
ls -al &&
git status -s && 
npm start"'

答案3

你可以用一种迂回的方式来做:

% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command

具有扩展名.command且可执行的 Shell 脚本可以双击以在新的终端窗口中运行。open您可能知道,命令 相当于双击 Finder 对象,因此此过程最终会在新的终端窗口中运行脚本中的命令。

有点扭曲,但看起来确实有效。我确信必须是一条更直接的途径(你实际上想做什么?),但我现在想不起来。

答案4

#!/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 tab),因此我可以直接运行dt以在同一文件夹中打开选项卡或者dt ls也可以运行那里的ls命令。

相关内容