35 votos

La apertura de una nueva terminal de la línea de comandos y ejecuta un comando en Mac OS X?

Es allí una manera de abrir un nuevo terminal de la línea de comandos, y la ejecución de un comando en el que la nueva terminal (en un Mac)?

por ejemplo, Algo como:

Terminal -e ls

donde ls se ejecuta en el nuevo terminal.

34voto

Steve Puntos 1319
osascript -e 'tell app "Terminal"
    do script "echo hello"
end tell'

Esto abre una terminal y ejecuta el comando "echo hola" en su interior.

4voto

Bluby Puntos 1

Esto funciona, al menos en la Montaña de León. No inicializar un shell interactivo cada vez, aunque se puede sustituir después de los hechos-invocando como "macterm exec su comando". La tienda esta en bin/macterm en su directorio home y 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 

3voto

Norman Gray Puntos 451

Usted puede hacerlo de una manera indirecta:

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

Secuencias de comandos de Shell que tienen la extensión .command y que son ejecutables, puede hacer doble clic en ejecutar, dentro de una nueva ventana de Terminal. El comando open, como usted probablemente sabe, es el equivalente a hacer doble clic en un Buscador de objetos, por lo que este procedimiento termina de ejecutar los comandos de la secuencia de comandos dentro de una nueva ventana de Terminal.

Ligeramente torcido, pero no parece funcionar. Me siento seguro de que no debe ser una ruta más directa a este (¿qué es lo que realmente estamos tratando de hacer?), pero se me escapa ahora mismo.

2voto

FrozT Puntos 21
#!/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

Usted necesita ruby 1.9 o usted tendrá que añadir la línea require 'rubygems' antes de los demás requiere y no se olvide de instalar gem rb-appscript.

Puse el nombre de este script dt (dup ficha), así que sólo puedo ejecutar dt a abrir la pestaña en la misma carpeta o dt ls a ejecutar también hay ls comando.

0voto

chris Puntos 10694

Me gustaría hacer esto con AppleScript. Usted puede optimizar mediante el uso de la osascript comando. El script sería algo como:

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

Si usted sólo va a nunca tener acceso a él en la terminal, puede omitir todos pero el centro de decirle declaración. Si desea una nueva ventana en lugar de una nueva pestaña, reemplace la pulsación de tecla t con n.

Yo no soy un experimentado lo suficiente AppleScripter para saber cómo llegar argumentos de línea de comandos y, a continuación, vuelva a escribir en la nueva ventana, pero estoy seguro de que es posible y no es demasiado difícil.

También, yo creo que esto funciona y no soy capaz de probar ahora mismo, pero estoy bastante seguro de que usted puede iniciar una secuencia de comandos de shell con alguna variante en #!/usr/bin/osascript -e y, a continuación, guárdelo como un archivo ejecutable sin embargo que usted desea. Que, al menos en mi cabeza, iba a hacer lo posible para que usted escriba algo como $ runinnewterm ls /Aplicaciones

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: