क्या कमांड लाइन से एक नया टर्मिनल खोलने का एक तरीका है, और उस नए टर्मिनल (मैक पर) पर कमांड चलाना है?
जैसे, कुछ इस तरह:
Terminal -e ls
ls
नए टर्मिनल में कहां चलाया जाता है।
क्या कमांड लाइन से एक नया टर्मिनल खोलने का एक तरीका है, और उस नए टर्मिनल (मैक पर) पर कमांड चलाना है?
जैसे, कुछ इस तरह:
Terminal -e ls
ls
नए टर्मिनल में कहां चलाया जाता है।
जवाबों:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
यह एक नया टर्मिनल खुल जाता है और इसके अंदर कमांड "गूंज हैलो" निष्पादित करता है।
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
शेल की तर्ज पर ओसा लिपि में तर्कों के साथ कैसे गुजरूं?
आप इसे राउंडअबाउट तरीके से कर सकते हैं:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
शेल स्क्रिप्ट जो एक्सटेंशन है .command
और जो निष्पादन कर रहे हैं, डबल-क्लिक एक नया टर्मिनल विंडो के अंदर चलाने के बारे में हो सकता है। कमांड open
, जैसा कि आप शायद जानते हैं, एक फाइंडर ऑब्जेक्ट पर डबल-क्लिक करने के बराबर है, इसलिए यह प्रक्रिया एक नई टर्मिनल विंडो के भीतर स्क्रिप्ट में कमांड चलाना समाप्त करती है।
थोड़ा मुड़, लेकिन यह काम करने के लिए प्रकट होता है। मुझे लगता है कि इस के लिए एक अधिक सीधा मार्ग होना चाहिए (यह आप वास्तव में क्या करने की कोशिश कर रहे हैं?), लेकिन यह अभी मुझे बचता है।
#!/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
आदेश।
यह काम करता है, कम से कम माउंटेन लायन के तहत। यह हर बार एक इंटरेक्टिव शेल को इनिशियलाइज़ करता है, हालाँकि आप इसे बाद में "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
मैं 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 जैसे कुछ टाइप करना संभव होगा