¿Hay alguna manera de abrir un nuevo terminal desde la línea de comandos y ejecutar un comando en ese nuevo terminal (en una Mac)?
por ejemplo, algo como:
Terminal -e ls
donde ls
se ejecuta en la nueva terminal.
¿Hay alguna manera de abrir un nuevo terminal desde la línea de comandos y ejecutar un comando en ese nuevo terminal (en una Mac)?
por ejemplo, algo como:
Terminal -e ls
donde ls
se ejecuta en la nueva terminal.
Respuestas:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Esto abre un nuevo terminal y ejecuta el comando "echo hello" dentro de él.
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
in shell pero en osa script?
Puedes hacerlo de forma indirecta:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
.command
Se puede hacer doble clic en los scripts de shell que tienen la extensión y que son ejecutables para ejecutarse dentro de una nueva ventana de Terminal. El comando open
, como probablemente sepa, es equivalente a hacer doble clic en un objeto Finder, por lo que este procedimiento termina ejecutando los comandos en el script dentro de una nueva ventana de Terminal.
Ligeramente retorcido, pero parece funcionar. Estoy seguro de que debe haber una ruta más directa hacia esto (¿qué es lo que realmente estás tratando de hacer?), Pero ahora se me escapa.
#!/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
Necesita ruby 1.9 o deberá agregar una línea require 'rubygems'
antes de que otros lo requieran y no olvide instalar gem rb-appscript
.
Llamé a este script dt
(pestaña doble), por lo que solo puedo ejecutar dt
para abrir la pestaña en la misma carpeta o dt ls
también ejecutar el ls
comando.
Esto funciona, al menos bajo Mountain Lion. Inicializa un shell interactivo cada vez, aunque puede reemplazarlo luego de invocarlo como "macterm exec your-command ". Almacene esto en bin / macterm en su directorio de inicio 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
Haría esto con AppleScript. Puede simplificarlo utilizando el comando osascript. Su guión sería algo como:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
Si solo va a acceder a él en la terminal, puede omitir todo menos la declaración de información intermedia. Si desea una nueva ventana en lugar de una nueva pestaña, reemplace la tecla t con n.
No soy un AppleScripter con suficiente experiencia para saber cómo obtener argumentos de línea de comandos y luego volver a escribirlos en la nueva ventana, pero estoy seguro de que es posible y no demasiado difícil.
Además, creo que esto funciona y no puedo probarlo en este momento, pero estoy bastante seguro de que puede iniciar un script de shell con alguna variante en #! / Usr / bin / osascript -e y luego guardarlo como un ejecutable como tú quieras. Lo cual, al menos en mi cabeza, le permitiría escribir algo como $ runinnewterm ls / Applications