Otwieranie nowego terminala z wiersza poleceń i uruchamianie polecenia w systemie Mac OS X?


22

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.


Próbuję dowiedzieć się, jak uruchomić ruby ​​na serwerze railsowym w nowym terminalu, używając polecenia 1.
zlog

To brzmi rozsądnie - uważam, że chcesz, aby stdout pojawił się w otwartym terminalu. W takim przypadku tak, chcesz napisać skrypt powłoki, który wykona żądaną pracę, a następnie zmień jego rozszerzenie na polecenie, jak poniżej.
Norman Gray

Odpowiedzi:


17
osascript -e 'tell app "Terminal"
    do script "echo hello"
end tell'

Otwiera to nowy terminal i wykonuje w nim polecenie „echo hello”.


Jestem pewien, że jest to oczywiste dla eksperta od Applecript, ale co z przykładem, który uruchamia dowolny program? Zasadniczo mogę zrobić „xterm -e somecomnand”
gman

3
Może to być nieco krótsze: osascript -e 'tell app "Terminal" to do script "echo hello"'
joemaller

jak ustawić aktywne nowe okno terminala?
Jenkamen

2

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.


Próbowałem tego i otwiera się nowy terminal, ale potem otrzymuję: ~ $ /Users/username/Work/Dev/scripts/hello.command; wyjście; logout [Proces zakończony] To jest moja hello.command: scripts $ cat hello.command #! / bin / sh - powiedz cześć
zlog

Ack, który nie sformatował się poprawnie, ale myślę, że masz pomysł.
zlog

@zlog: ale powiedział „cześć”, tak? W preferencjach Terminal.app zobacz zakładkę „Ustawienia” i „Powłoka” w tym polu. Zobaczysz menu „Po zamknięciu powłoki:”. Myślę, że domyślnie jest to „Nie zamykaj okna” i to właśnie widzisz. Jeśli zmienisz to na „Zamknij, jeśli powłoka wyszła czysto”, okno terminalu powinno zniknąć po zakończeniu skryptu powłoki.
Norman Gray

Czy mogę wydać polecenie, aby pozostawić otwartą sesję i nie wylogować się?
Royi

2
#!/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.


0

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


0

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 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.