Komut satırından yeni bir terminal açmak ve Mac OS X'de bir komut çalıştırmak mı?


24

Komut satırından yeni bir terminal açmanın ve bu yeni terminalde (Mac'te) bir komut çalıştırmanın bir yolu var mı?

örneğin, şöyle bir şey:

Terminal -e ls

lsYeni terminalde nerede çalıştırılır.


Rails sunucusunda bir yakutun nasıl çalıştırılacağını yeni bir terminalde, 1 komutunu kullanarak çözmeye çalışıyorum.
zlog

Bu kulağa mantıklı geliyor - stdout'un açılan terminalde görünmesini istiyorum. Bu durumda, evet, istediğiniz işi yapan bir kabuk betiği yazmak ve daha sonra aşağıdaki uzantıyı .command olarak değiştirmek istiyorsunuz.
Norman Gray

Yanıtlar:


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

Bu yeni bir terminal açar ve içindeki "echo hello" komutunu çalıştırır.


Bunun bir el yazması uzmanına açık olduğuna eminim ama herhangi bir program başlatan bir örneğe ne dersiniz? Temelde 'xterm -e somecomnand' yapabilirim gibi
gman

3
Bu biraz daha kısa olabilir:osascript -e 'tell app "Terminal" to do script "echo hello"'
Joemaller

1
Yeni terminal penceresi üst aktif nasıl ayarlanır?
Jenkamen

Ve argümanları "$@"kabuklu satırlar boyunca ancak osa betiğinde nasıl iletirim?
rednoah

3

Bunu dolambaçlı bir şekilde yapabilirsiniz:

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

Uzantısına sahip olan .commandve çalıştırılabilir olan kabuk komut dosyaları, yeni bir Terminal penceresi içinde çalıştırmak için çift tıklanabilir. openMuhtemelen bildiğiniz gibi, komut bir Finder nesnesine çift tıklamakla eşdeğerdir, bu nedenle bu prosedür komutları komut satırında yeni bir Terminal penceresi içinde çalıştırmakla sona erer.

Hafifçe bükülmüş, fakat işe yaramış gibi görünüyor. Bunun için daha doğrudan bir yol olması gerektiğine inanıyorum (aslında ne yapmaya çalışıyorsun?), Ama şu anda benden kaçıyor.


Bunu denedim ve yeni bir terminal açıldı, ama sonra anladım: ~ $ /Users/username/Work/Dev/scripts/hello.command; çıkış; çıkış [İşlem tamamlandı] Bu benim hello.command: scripts $ cat hello.command #! / bin / sh - merhaba de
zlog

Ack, bu doğru bir şekilde formatlanmadı, ama sanırım fikri anladın.
zlog

@zlog: ama 'merhaba' dedi, evet? Terminal.app tercihlerinde, içindeki 'Ayarlar' ve 'Kabuk' sekmesine bakın. 'Kabuk çıktığında:' menüsünü göreceksiniz. Sanırım varsayılan, 'Pencereyi kapatmayın' ve görmekte olduğunuz şey budur. Bunu 'Kabuk temiz çıktıysa kapat' olarak değiştirirseniz, kabuk betiği bittiğinde terminal penceresi kaybolmalıdır.
Norman Gray

Oturumu açık bırakıp oturumu kapatmama komutunu verebilir miyim?
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

Yakut 1.9'a ihtiyacınız var, require 'rubygems'yoksa diğerleri gerektirmeden satır eklemeniz gerekecek ve yüklemeyi unutmayın gem rb-appscript.

Bu betiği dt(dup tab) adlandırdım, böylece sadece dtaynı klasördeki sekmeyi açmak veya dt lsorada lskomutu çalıştırmak için koşabilirim .


2

Bu, en azından dağ aslanı altında çalışır. Her seferinde etkileşimli bir kabuk başlatır, ancak "macterm komutunu çalıştır" olarak çağırdıktan sonra gerçeği değiştirebilirsin . Bunu bin / macterm dizininde saklayın ve chmod a + x bin / macterm dizinini kullanın:

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

0

Bunu AppleScript ile yapardım. Osascript komutunu kullanarak düzene sokabilirsiniz. Komut dosyanız şöyle bir şey olurdu:

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

Eğer sadece terminalde erişecekseniz, o zaman orta söyleyen ifadeden başka hepsini ihmal edebilirsiniz. Yeni bir sekme yerine yeni bir pencere istiyorsanız, t tuşunu n ile değiştirin.

Komut satırı argümanlarını nasıl alacağımı ve yeni pencerede nasıl yeniden yazacağımı bilecek kadar deneyimli bir AppleScripter değilim, ancak bunun mümkün ve çok zor olmadığından eminim.

Ayrıca, bunun işe yaradığını düşünüyorum ve şu anda test edemiyorum, ancak #! / Usr / bin / osascript -e üzerinde bir değişkenle bir kabuk betiği başlatabildiğinizden eminim ve sonra çalıştırılabilir olarak kaydedebilirsiniz. sen nasıl istersen Bu, en azından kafamda, $ runinnewterm ls / Applications gibi bir şey yazmanızı mümkün kılacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.