web-dev-qa-db-ja.com

コマンドラインから新しいターミナルを開いて、Mac OS Xでコマンドを実行しますか?

コマンドラインから新しいターミナルを開き、その新しいターミナル(Mac)でコマンドを実行する方法はありますか?

例:次のようなもの:

Terminal -e ls

ここで、lsは新しいターミナルで実行されます。

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

これにより、新しいターミナルが開き、その内部で "echo hello"コマンドが実行されます。

25
LaC

これは、少なくともマウンテンライオンの下で機能します。対話型シェルは毎回初期化されますが、 "macterm exec your-command"として呼び出すことで、事後的に置き換えることができます。これをホームディレクトリのbin/mactermに保存し、chmod a + x bin/macterm:

#!/usr/bin/osascript

on run argv
   tell app "Terminal" 
   set AppleScript's text item delimiters to " "
        do script argv as string
        end tell   
end run 
3
Bluby

あなたはそれを回り道で行うことができます:

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

拡張子が.commandで実行可能なシェルスクリプトをダブルクリックすると、新しいターミナルウィンドウ内で実行できます。コマンドopenは、ご存知のとおり、Finderオブジェクトをダブルクリックするのと同じであるため、この手順では、新しいターミナルウィンドウ内のスクリプトでコマンドを実行します。

少しねじれていますが、機能しているようです。私はそこにmustより直接的な経路であることを確信しています(実際に何をしようとしているのですか?)。

3
Norman Gray
#!/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コマンドを実行することができます。

2
tig

ワンライナーは素晴らしいです

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"'
1
jasonleonhard

私はこれをAppleScriptで行います。 osascriptコマンドを使用すると、効率化できます。スクリプトは次のようになります。

tell application "Terminal"
  activate
  tell application "System Events"
    keystroke "t" using {command down}
  end tell
end tell

ターミナルでこれにアクセスするだけの場合は、中央のtellステートメント以外はすべて省略できます。新しいタブではなく新しいウィンドウが必要な場合は、tキーストロークをnに置き換えます。

私は、コマンドライン引数を取得して新しいウィンドウに再入力する方法を知るのに十分な経験を積んだAppleScripterではありませんが、それは可能であり、それほど難しくはないと確信しています。

また、私はthinkこれで機能し、現在はテストできませんが、#!/ usr/bin/osascript -eでバリアントを使用してシェルスクリプトを開始できると確信しています。実行可能ファイルとして保存します。これは、少なくとも私の頭の中で、あなたが$ runinnewterm ls/Applicationsのようなものを入力することを可能にするでしょう

0
NReilingh