कमांड लाइन से एक नया टर्मिनल खोलना और मैक ओएस एक्स पर कमांड चलाना?


24

क्या कमांड लाइन से एक नया टर्मिनल खोलने का एक तरीका है, और उस नए टर्मिनल (मैक पर) पर कमांड चलाना है?

जैसे, कुछ इस तरह:

Terminal -e ls

lsनए टर्मिनल में कहां चलाया जाता है।


मैं यह पता लगाने की कोशिश कर रहा हूं कि 1 कमांड का उपयोग करके नए टर्मिनल में रेल सर्वर पर रूबी कैसे चलाया जाए।
zlog

यही कारण है कि लगता है उचित - मैं इसे ले आप stdout खोला टर्मिनल में दिखाना चाहते हैं। उस स्थिति में, हां, आप एक शेल स्क्रिप्ट लिखना चाहते हैं जो वह काम करता है जो आप चाहते हैं, और फिर नीचे के रूप में इसके विस्तार को .command में बदल दें।
नॉर्मन ग्रे

जवाबों:


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

यह एक नया टर्मिनल खुल जाता है और इसके अंदर कमांड "गूंज हैलो" निष्पादित करता है।


मुझे यकीन है कि यह एक applescript विशेषज्ञ के लिए स्पष्ट है, लेकिन किसी भी कार्यक्रम को लॉन्च करने वाले उदाहरण के बारे में कैसे? मूल रूप से है कि मैं क्या कर सकते हैं 'टर्म -e somecomnand'
GMAN

3
यह थोड़ा कम हो सकता है:osascript -e 'tell app "Terminal" to do script "echo hello"'
joemaller

1
नई टर्मिनल विंडो को कैसे सेट करें?
जेनकामेन

और मैं "$@"शेल की तर्ज पर ओसा लिपि में तर्कों के साथ कैसे गुजरूं?
Rednoah

3

आप इसे राउंडअबाउट तरीके से कर सकते हैं:

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

शेल स्क्रिप्ट जो एक्सटेंशन है .commandऔर जो निष्पादन कर रहे हैं, डबल-क्लिक एक नया टर्मिनल विंडो के अंदर चलाने के बारे में हो सकता है। कमांड open, जैसा कि आप शायद जानते हैं, एक फाइंडर ऑब्जेक्ट पर डबल-क्लिक करने के बराबर है, इसलिए यह प्रक्रिया एक नई टर्मिनल विंडो के भीतर स्क्रिप्ट में कमांड चलाना समाप्त करती है।

थोड़ा मुड़, लेकिन यह काम करने के लिए प्रकट होता है। मुझे लगता है कि इस के लिए एक अधिक सीधा मार्ग होना चाहिए (यह आप वास्तव में क्या करने की कोशिश कर रहे हैं?), लेकिन यह अभी मुझे बचता है।


मैंने यह कोशिश की और एक नया टर्मिनल खुलता है, लेकिन फिर मुझे मिलता है: ~ $ /Users/username/Work/Dev/scripts/hello.command; बाहर जाएं; $ बिल्ली hello.command # लिपियों: लॉगआउट [प्रक्रिया पूर्ण] यह मेरी hello.command है! / बिन / श - बोलो नमस्ते
zlog

ठीक है, यह ठीक से प्रारूपित नहीं किया गया था, लेकिन मुझे लगता है कि आपको यह विचार मिलता है।
8

@ ज़्लॉग: लेकिन यह 'नमस्ते' कहा, हाँ? Terminal.app की वरीयताओं में, 'सेटिंग' और 'शैल' है कि भीतर टैब देखें। आपको एक मेनू दिखाई देगा 'जब शेल बाहर निकलता है:'। मुझे लगता है कि डिफ़ॉल्ट 'Do खिड़की बंद नहीं' है, और उस के लिए आप क्या कर रहे हैं देख। आप 'बंद करता है, तो खोल सफाई से बाहर निकल गया' को यह बदलते हैं, तो टर्मिनल विंडो एक बार खोल स्क्रिप्ट खत्म गायब करना चाहिए।
नॉर्मन ग्रे

क्या मैं इसके सत्र को खुला छोड़ कर लॉग आउट करने का आदेश दे सकता हूँ?
रॉय

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

आप 1.9 माणिक की जरूरत है या आप लाइन जोड़ने की आवश्यकता होगी require 'rubygems'से पहले दूसरों की आवश्यकता है और भूल नहीं है स्थापित करने के लिए gem rb-appscript

मैं इस स्क्रिप्ट नामित dtतो मैं बस चला सकते हैं, (dup टैब) dtएक ही फ़ोल्डर में खुले टैब के या dt lsभी वहाँ चलाने के लिए lsआदेश।


2

यह काम करता है, कम से कम माउंटेन लायन के तहत। यह हर बार एक इंटरेक्टिव शेल को इनिशियलाइज़ करता है, हालाँकि आप इसे बाद में "macterm exec your-command " के रूप में लागू करके बदल सकते हैं । अपने घर निर्देशिका में bin / macterm में इस स्टोर और एक + x bin / macterm chmod:

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

मैं AppleScript के साथ ऐसा करूंगा। आप इसे ऑसमस्क्रिप्ट कमांड का उपयोग करके स्ट्रीमलाइन कर सकते हैं। आपकी स्क्रिप्ट कुछ इस तरह होगी:

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

यदि आप केवल टर्मिनल में इसे कभी एक्सेस करने जा रहे हैं, तो आप सभी को छोड़ सकते हैं, लेकिन मध्य विवरण कथन। यदि आप एक नए टैब के बजाय एक नई विंडो चाहते हैं, तो टी कीस्ट्रोक को n से बदलें।

मैं यह जानने के लिए पर्याप्त अनुभवी AppleScripter नहीं हूं कि कमांड-लाइन तर्क कैसे प्राप्त करें और फिर उन्हें नई विंडो में फिर से लिखें, लेकिन मुझे यकीन है कि यह संभव है और बहुत मुश्किल नहीं है।

इसके अलावा, मैं लगता है कि एक निष्पादन योग्य के रूप में इस काम करता है और मैं अभी परीक्षण करने में सक्षम नहीं हूँ, लेकिन मैं यकीन है कि आप # पर किसी भिन्न रूप के साथ एक खोल स्क्रिप्ट शुरू कर सकते हैं रहा हूँ! / Osascript -e फिर इसे सहेजें और / usr / bin तुम जैसा चाहो। जो, कम से कम मेरे सिर में, आपके लिए $ runinnewterm ls / Applications जैसे कुछ टाइप करना संभव होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.