Открытие нового терминала из командной строки и выполнение команды на Mac OS X?

Существует ли способ открыть новый терминал из командной строки и выполнить команду на том новом терминале (на Mac)?

например, Что-то как:

Terminal -e ls

где ls выполняется в новом терминале.

24
задан 12.08.2010, 01:29

3 ответа

Можно сделать это окольным способом:

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

Сценарии оболочки, которые имеют расширение .command и на том, которые являются исполняемым файлом, можно дважды щелкнуть работать в новом Окне терминала. Команда open, как Вы, вероятно, знаете, эквивалентно двойному щелчку по объекту Finder, таким образом, эта процедура заканчивает тем, что выполнила команды в сценарии в новом Окне терминала.

Немного скрученный, но это, действительно кажется, работает. Я чувствую уверенность, что должен быть более прямой маршрут к этому (что это, Вы на самом деле пытаетесь сделать?), но это выходит из меня прямо сейчас.

3
ответ дан 07.12.2019, 09:44
#!/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

Вам нужны рубиновые 1.9, или необходимо будет добавить строку require 'rubygems' перед другими требует, и не забывайте устанавливать gem rb-appscript.

Я назвал этот сценарий dt (копируйте вкладку), таким образом, я могу просто работать dt открыть вкладку в той же папке или dt ls также работать туда ls команда.

2
ответ дан 07.12.2019, 09:44

Я сделал бы это с AppleScript. Можно оптимизировать его при помощи команды osascript. Ваш сценарий был бы чем-то как:

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

Если Вы только идете в, когда-либо получают доступ к нему в терминале, то можно опустить, все кроме середины говорят оператор. Если Вы хотите новое окно вместо новой вкладки, заменяете нажатие клавиши t n.

Я не достаточно опытный AppleScripter, чтобы знать, как получить параметры командной строки и затем перепечатать их в новом окне, но я уверен, что это возможно и не слишком трудно.

Кроме того, я думаю, что это работает, и я не могу протестировать прямо сейчас, но я вполне уверен, можно запустить сценарий оболочки с некоторого варианта на #!/usr/bin/osascript-e и затем сохранить его как исполняемый файл однако, Вы хотите. Который, по крайней мере, в моей голове, позволил бы Вам ввести что-то как $ runinnewterm ls / Приложения

0
ответ дан 07.12.2019, 09:44

Теги

Похожие вопросы