C'è un modo per aprire un nuovo terminale dalla riga di comando ed eseguire un comando su quel nuovo terminale (su un Mac)?
ad es. qualcosa del tipo:
Terminal -e ls
dove ls
viene eseguito nel nuovo terminale.
C'è un modo per aprire un nuovo terminale dalla riga di comando ed eseguire un comando su quel nuovo terminale (su un Mac)?
ad es. qualcosa del tipo:
Terminal -e ls
dove ls
viene eseguito nel nuovo terminale.
Risposte:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Questo apre un nuovo terminale ed esegue il comando "ciao eco" al suo interno.
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
in shell ma in script osa?
Puoi farlo in una rotonda:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
Gli script Shell che hanno l'estensione .command
e sono eseguibili, possono essere cliccati due volte per essere eseguiti all'interno di una nuova finestra Terminale. Il comando open
, come probabilmente saprai, equivale a fare doppio clic su un oggetto Finder, quindi questa procedura finisce per eseguire i comandi nello script all'interno di una nuova finestra Terminale.
Leggermente contorto, ma sembra funzionare. Sono sicuro che ci deve essere un percorso più diretto per questo (che cosa stai effettivamente cercando di fare?), Ma mi sfugge in questo momento.
#!/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
Hai bisogno di ruby 1.9 o dovrai aggiungere la linea require 'rubygems'
prima che gli altri lo richiedano e non dimenticare di installare gem rb-appscript
.
Ho chiamato questo script dt
(scheda dup), quindi posso semplicemente eseguire dt
per aprire la scheda nella stessa cartella o dt ls
per eseguire anche il ls
comando lì .
Funziona, almeno sotto Mountain Lion. Inizializza ogni volta una shell interattiva, sebbene sia possibile sostituirla dopo averla invocata come "macterm exec your-command ". Conservalo in bin / macterm nella tua home directory e 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
Lo farei con AppleScript. Puoi ottimizzarlo utilizzando il comando osascript. La tua sceneggiatura sarebbe simile a:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
Se accederai al terminale solo nel terminale, puoi omettere tutto tranne la dichiarazione tell centrale. Se si desidera una nuova finestra anziché una nuova scheda, sostituire la sequenza di tasti t con n.
Non sono abbastanza esperto AppleScripter per sapere come ottenere argomenti da riga di comando e quindi digitarli nuovamente nella nuova finestra, ma sono sicuro che sia possibile e non troppo difficile.
Inoltre, penso che funzioni e non sono in grado di testare ora, ma sono abbastanza sicuro che puoi avviare uno script di shell con qualche variante su #! / Usr / bin / osascript -e e quindi salvarlo come eseguibile Comunque tu voglia. Che, almeno nella mia testa, ti renderebbe possibile digitare qualcosa come $ runinnewterm ls / Applicazioni