Czy istnieje sposób na otwarcie nowego terminala z wiersza poleceń i uruchomienie polecenia na tym nowym terminalu (na komputerze Mac)?
np. coś takiego:
Terminal -e ls
gdzie ls
jest uruchamiany w nowym terminalu.
Czy istnieje sposób na otwarcie nowego terminala z wiersza poleceń i uruchomienie polecenia na tym nowym terminalu (na komputerze Mac)?
np. coś takiego:
Terminal -e ls
gdzie ls
jest uruchamiany w nowym terminalu.
Odpowiedzi:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Otwiera to nowy terminal i wykonuje w nim polecenie „echo hello”.
osascript -e 'tell app "Terminal" to do script "echo hello"'
Możesz to zrobić okrężną drogą:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
Skrypty powłoki z rozszerzeniem .command
i które są wykonywalne, można kliknąć dwukrotnie, aby uruchomić w nowym oknie terminala. Komenda open
, jak zapewne wiesz, jest równoważne dwukrotnemu kliknięciu obiektu Finder, więc ta procedura kończy wykonywanie poleceń w skrypcie w nowym oknie terminala.
Lekko skręcone, ale wydaje się działać. Jestem tam pewien musi być bardziej bezpośrednią drogą do tego (co właściwie próbujesz zrobić?), ale ucieka mi teraz.
#!/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
Potrzebujesz ruby 1.9 lub musisz dodać linię require 'rubygems'
przed innymi wymaga i nie zapomnij zainstalować gem rb-appscript
.
Nazwałem ten skrypt dt
(zakładka dup), więc mogę po prostu uruchomić dt
aby otworzyć kartę w tym samym folderze lub dt ls
także tam biegać ls
dowództwo.
Zrobiłbym to za pomocą AppleScript. Możesz go usprawnić za pomocą polecenia osascript. Twój skrypt będzie wyglądał następująco:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
Jeśli masz zamiar uzyskać do niego dostęp tylko w terminalu, możesz pominąć wszystkie instrukcje z wyjątkiem tell. Jeśli chcesz nowe okno zamiast nowej karty, zastąp klawisz t klawiszem n.
Nie jestem wystarczająco doświadczony w AppleScripter, aby wiedzieć, jak uzyskać argumenty wiersza poleceń, a następnie wpisać je w nowym oknie, ale jestem pewien, że jest to możliwe i nie jest zbyt trudne.
Również ja myśleć to działa i nie jestem w stanie przetestować teraz, ale jestem pewien, że możesz uruchomić skrypt powłoki z pewnym wariantem na #! / usr / bin / osascript -e, a następnie zapisać go jako plik wykonywalny, jak chcesz. Co, przynajmniej w mojej głowie, umożliwiłoby ci wpisanie czegoś takiego jak $ runinnewterm ls / Applications
To działa, przynajmniej pod Mountain Lion. Inicjuje powłokę interaktywną za każdym razem, chociaż można ją zastąpić faktem, wywołując ją jako „exec macterm twoje polecenie ". Zapisz to w bin / macterm w twoim katalogu domowym i 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