명령 행에서 새 터미널을 열고 새 터미널 (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
이 있고 실행 가능한 셸 스크립트를 두 번 클릭하여 새 터미널 창에서 실행할 수 있습니다. 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
(dup tab)의 이름을 지정 했으므로 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 문을 제외한 모든 것을 생략 할 수 있습니다. 새 탭 대신 새 창을 원하면 t 키 입력을 n으로 바꾸십시오.
명령 줄 인수를 가져 와서 새 창에서 다시 입력하는 방법을 알기에 충분한 경험이없는 AppleScripter는 아니지만 가능하고 너무 어렵지는 않습니다.
또한, 이것이 효과가 있다고 생각 하고 지금 테스트 할 수는 없지만 #! / usr / bin / osascript -e에서 변형을 사용하여 쉘 스크립트를 시작한 다음 실행 파일로 저장할 수 있다고 확신합니다 그러나 당신은 원합니다. 적어도 내 머리 속에는 $ runinnewterm ls / Applications와 같은 것을 입력 할 수 있습니다.