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 ls
dijalankan di terminal baru.
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 ls
dijalankan di terminal baru.
Jawaban:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
Ini membuka terminal baru dan menjalankan perintah "echo hello" di dalamnya.
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
dalam shell tetapi dalam skrip osa?
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 .command
dan 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.
#!/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 dt
untuk membuka tab di folder yang sama atau dt ls
juga menjalankan ls
perintah di sana .
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
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