Membuka terminal baru dari baris perintah dan menjalankan perintah di Mac OS X?

24

Apakah ada cara untuk membuka terminal baru dari baris perintah, dan menjalankan perintah di terminal baru itu (di Mac)?

mis. Sesuatu seperti:

Terminal -e ls

di mana lsdijalankan di terminal baru.

zlog
sumber
Saya mencoba mencari cara menjalankan ruby ​​di server rel di terminal baru, menggunakan 1 perintah.
zlog
Kedengarannya masuk akal - saya kira Anda ingin stdout muncul di terminal yang dibuka. Dalam hal itu, ya, Anda ingin menulis skrip shell yang melakukan pekerjaan yang Anda inginkan, dan kemudian ubah ekstensinya menjadi .command, seperti di bawah ini.
Norman Gray

Jawaban:

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

Ini membuka terminal baru dan menjalankan perintah "echo hello" di dalamnya.

LaC
sumber
Saya yakin ini jelas bagi seorang ahli applescript tetapi bagaimana dengan contoh yang meluncurkan program apa pun? Pada dasarnya seperti saya bisa melakukan 'xterm -e somecomnand'
gman
3
Ini bisa sedikit lebih pendek:osascript -e 'tell app "Terminal" to do script "echo hello"'
joemaller
1
cara mengatur terminal window baru atas aktif?
Jenkamen
Dan bagaimana saya menyampaikan argumen sepanjang garis "$@"dalam shell tetapi dalam skrip osa?
rednoah
3

Anda dapat melakukannya dengan cara memutar:

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

Skrip Shell yang memiliki ekstensi .commanddan yang dapat dieksekusi, dapat diklik dua kali untuk dijalankan di dalam jendela Terminal baru. Perintah open, seperti yang mungkin Anda ketahui, sama dengan mengklik dua kali pada objek Finder, sehingga prosedur ini akhirnya menjalankan perintah dalam skrip di dalam jendela Terminal baru.

Memutar sedikit, tetapi tampaknya berhasil. Saya merasa yakin harus ada rute yang lebih langsung ke ini (apa yang sebenarnya Anda coba lakukan?), Tetapi itu lolos dari saya sekarang.

Norman Gray
sumber
Saya mencoba ini dan terminal baru terbuka, tetapi kemudian saya mendapatkan: ~ $ /Users/username/Work/Dev/scripts/hello.command; keluar; logout [Proses selesai] Ini adalah hello.command saya: skrip $ cat hello.command #! / bin / sh - say hello
zlog
Ack, itu tidak memformat dengan benar, tapi saya pikir Anda mendapatkan ide.
zlog
@log: tapi katanya 'halo', ya? Di preferensi Terminal.app, lihat tab 'Pengaturan' dan 'Shell' di dalamnya. Anda akan melihat menu 'Ketika shell keluar:'. Saya pikir defaultnya adalah 'Jangan tutup jendela', dan itulah yang Anda lihat. Jika Anda mengubahnya menjadi 'Tutup jika shell keluar dengan bersih', jendela terminal akan hilang begitu skrip shell selesai.
Norman Gray
Bisakah saya membuat perintah untuk membiarkan sesi terbuka dan tidak keluar?
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

Anda perlu ruby ​​1.9 atau Anda harus menambahkan baris require 'rubygems'sebelum yang lain meminta dan jangan lupa untuk menginstal gem rb-appscript.

Saya menamai skrip ini dt(dup tab), jadi saya bisa menjalankannya dtuntuk membuka tab di folder yang sama atau dt lsjuga menjalankan lsperintah di sana .

cekcok
sumber
2

Ini berfungsi, setidaknya di bawah Singa Gunung. Itu menginisialisasi shell interaktif setiap kali, meskipun Anda dapat mengganti setelah-fakta dengan memanggilnya sebagai "macterm exec your-command ". Simpan ini di bin / macterm di direktori home Anda dan 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 
Bluby
sumber
0

Saya akan melakukan ini dengan AppleScript. Anda dapat merampingkannya dengan menggunakan perintah osascript. Script Anda akan menjadi seperti:

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

Jika Anda hanya akan mengaksesnya di terminal, maka Anda dapat menghilangkan semua kecuali pernyataan tengah. Jika Anda menginginkan jendela baru dan bukan tab baru, ganti t keystroke dengan n.

Saya bukan AppleScripter yang cukup berpengalaman untuk mengetahui cara mendapatkan argumen baris perintah dan kemudian mengetik ulang di jendela baru, tapi saya yakin itu mungkin dan tidak terlalu sulit.

Juga, saya pikir ini berfungsi dan saya tidak dapat menguji sekarang, tapi saya cukup yakin Anda dapat memulai skrip shell dengan beberapa varian di #! / Usr / bin / osascript -e dan kemudian menyimpannya sebagai executable bagaimanapun yang anda inginkan. Yang, setidaknya di kepala saya, akan memungkinkan Anda untuk mengetik sesuatu seperti $ runinnewterm ls / Applications

NReilingh
sumber