Есть ли способ открыть новый терминал из командной строки и запустить команду на этом новом терминале (на Mac)?
например, что-то вроде:
Terminal -e ls
где ls
запускается в новом терминале.
Есть ли способ открыть новый терминал из командной строки и запустить команду на этом новом терминале (на Mac)?
например, что-то вроде:
Terminal -e ls
где ls
запускается в новом терминале.
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Это открывает новый терминал и выполняет команду "эхо привет" внутри него.
#!/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
.
Вы можете сделать это окольным путем:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
Сценарии оболочки, имеющие расширение .command
и выполняемые, можно дважды щелкнуть для запуска в новом окне терминала. Команда open
, как вы, вероятно, знаете, эквивалентна двойному щелчку по объекту Finder, поэтому эта процедура завершается выполнением команд в сценарии в новом окне терминала.
Немного искривлено, но это, кажется, работает. Я уверен, что должен быть более прямой путь к этому (что вы на самом деле пытаетесь сделать?), Но это ускользает от меня прямо сейчас.
Это работает, по крайней мере, под Mountain Lion. Он каждый раз инициализирует интерактивную оболочку, хотя вы можете заменить ее после ее завершения, вызвав ее как «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
Я бы сделал это с AppleScript. Вы можете оптимизировать его с помощью команды osascript. Ваш сценарий будет что-то вроде:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
Если вы собираетесь получить к нему доступ только через терминал, тогда вы можете опустить все, кроме среднего оператора Tell. Если вы хотите новое окно вместо новой вкладки, замените нажатие клавиши t на n.
Я не достаточно опытный AppleScripter, чтобы знать, как получить аргументы командной строки, а затем перепечатать их в новом окне, но я уверен, что это возможно и не слишком сложно.
Кроме того, я думаю , что это работает, и я не могу сейчас тестировать, но я почти уверен, что вы можете запустить сценарий оболочки с некоторым вариантом на #!/usr/bin/osascript -e, а затем сохраните его как исполняемый файл, как вы хотите. Что, по крайней мере, в моей голове, позволило бы вам напечатать что-то вроде $ runinnewterm ls /Applications