มีวิธีการเปิดเทอร์มินัลใหม่จากบรรทัดคำสั่งและการรันคำสั่งบนเทอร์มินัลใหม่นั้น (บน Mac) หรือไม่?
เช่นสิ่งที่ชอบ:
Terminal -e ls
ที่ls
ทำงานในสถานีใหม่
มีวิธีการเปิดเทอร์มินัลใหม่จากบรรทัดคำสั่งและการรันคำสั่งบนเทอร์มินัลใหม่นั้น (บน Mac) หรือไม่?
เช่นสิ่งที่ชอบ:
Terminal -e ls
ที่ls
ทำงานในสถานีใหม่
คำตอบ:
osascript -e 'tell app "Terminal"
do script "echo hello"
end tell'
นี่เป็นการเปิดเทอร์มินัลใหม่และดำเนินการคำสั่ง "echo hello" ที่อยู่ภายใน
osascript -e 'tell app "Terminal" to do script "echo hello"'
"$@"
เชลล์ได้อย่างไร แต่ในสคริปต์ osa
คุณสามารถทำได้ในลักษณะวงเวียน:
% cat /tmp/hello.command
#! /bin/sh -
say hello
% chmod +x /tmp/hello.command
% open /tmp/hello.command
เชลล์สคริปต์ที่มีส่วนขยาย.command
และสามารถเรียกใช้งานได้สามารถดับเบิลคลิกเพื่อเรียกใช้ภายในหน้าต่าง Terminal ใหม่ คำสั่งopen
ตามที่คุณอาจรู้คือเทียบเท่ากับการดับเบิลคลิกที่วัตถุ Finder ดังนั้นขั้นตอนนี้จะจบลงด้วยการรันคำสั่งในสคริปต์ภายในหน้าต่างเทอร์มินัลใหม่
บิดเล็กน้อย แต่ดูเหมือนว่าจะทำงาน ฉันรู้สึกมั่นใจว่าจะต้องมีเส้นทางที่ตรงไปมากกว่านี้ (คุณพยายามทำอะไรจริง ๆ ) แต่มันหนีฉันไปแล้ว
#!/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
(แท็บซ้ำ) ดังนั้นฉันจึงสามารถเรียกใช้dt
เพื่อเปิดแท็บในโฟลเดอร์เดียวกันหรือdt ls
เรียกใช้ls
คำสั่งที่นั่นได้
งานนี้อย่างน้อยภายใต้ Mountain Lion มันเริ่มต้นเชลล์แบบโต้ตอบในแต่ละครั้งแม้ว่าคุณจะสามารถแทนที่สิ่งนั้นได้หลังจากข้อเท็จจริงโดยเรียกมันว่า "macterm exec your-command " เก็บสิ่งนี้ใน bin / macterm ในโฮมไดเร็กตอรี่ของคุณและ 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
ฉันจะทำเช่นนี้กับ AppleScript คุณสามารถปรับปรุงได้โดยใช้คำสั่ง osascript สคริปต์ของคุณจะเป็นเช่น:
tell application "Terminal"
activate
tell application "System Events"
keystroke "t" using {command down}
end tell
end tell
หากคุณจะเข้าถึงเฉพาะที่เทอร์มินัลคุณสามารถละทั้งหมดยกเว้นคำสั่ง tell ปานกลาง หากคุณต้องการหน้าต่างใหม่แทนแท็บใหม่ให้แทนที่การกดแป้นพิมพ์ด้วย n
ฉันไม่ได้มีประสบการณ์มากพอที่จะรู้วิธีรับอาร์กิวเมนต์บรรทัดคำสั่งจากนั้นพิมพ์ใหม่ในหน้าต่างใหม่ แต่ฉันแน่ใจว่ามันเป็นไปได้และไม่ยากเกินไป
นอกจากนี้ฉันคิดว่ามันใช้งานได้และฉันไม่สามารถทดสอบได้ในตอนนี้ แต่ฉันค่อนข้างแน่ใจว่าคุณสามารถเริ่มเชลล์สคริปต์ด้วยตัวแปรบางอย่างใน #! / usr / bin / osascript -e แล้วบันทึกเป็นไฟล์ปฏิบัติการ แต่คุณต้องการ. ซึ่งอย่างน้อยในหัวของฉันจะทำให้คุณพิมพ์บางอย่างเช่น $ runinnewterm ls / Applications