コマンドラインから新しいターミナルを開き、その新しいターミナル(Mac)でコマンドを実行する方法はありますか?
例:次のようなもの:
Terminal -e ls
ここで、ls
は新しいターミナルで実行されます。
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
これにより、新しいターミナルが開き、その内部で "echo hello"コマンドが実行されます。
これは、少なくともマウンテンライオンの下で機能します。対話型シェルは毎回初期化されますが、 "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
あなたはそれを回り道で行うことができます:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
拡張子が.command
で実行可能なシェルスクリプトをダブルクリックすると、新しいターミナルウィンドウ内で実行できます。コマンドopen
は、ご存知のとおり、Finderオブジェクトをダブルクリックするのと同じであるため、この手順では、新しいターミナルウィンドウ内のスクリプトでコマンドを実行します。
少しねじれていますが、機能しているようです。私はそこにmustより直接的な経路であることを確信しています(実際に何をしようとしているのですか?)。
#!/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
コマンドを実行することができます。
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"'
私はこれを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のようなものを入力することを可能にするでしょう