Есть ли способ открыть новый терминал из командной строки и запустить команду на этом новом терминале (на Mac)?
например, что-то вроде:
Terminal -e ls
где ls
запустить в новом терминале.
Есть ли способ открыть новый терминал из командной строки и запустить команду на этом новом терминале (на Mac)?
например, что-то вроде:
Terminal -e ls
где ls
запустить в новом терминале.
Ответы:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Это открывает новый терминал и выполняет команду "эхо привет" внутри него.
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
в оболочке, но в сценарии osa?
Вы можете сделать это окольным путем:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
Сценарии оболочки, которые имеют расширение .command
и являются исполняемыми, можно дважды щелкнуть для запуска в новом окне терминала. Команда open
, как вы, вероятно, знаете, эквивалентна двойному щелчку по объекту Finder, поэтому эта процедура завершает выполнение команд в сценарии в новом окне терминала.
Немного искривлено, но это, кажется, работает. Я уверен, что должен быть более прямой путь к этому (что вы на самом деле пытаетесь сделать?), Но это ускользает от меня прямо сейчас.
#!/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
команду.
Это работает, по крайней мере, под 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