명령 행에서 새 터미널을 열고 Mac OS X에서 명령을 실행 하시겠습니까?


24

명령 행에서 새 터미널을 열고 새 터미널 (Mac)에서 명령을 실행하는 방법이 있습니까?

예 : 다음과 같은 것 :

Terminal -e ls

여기서 ls새 터미널에서 실행됩니다.


1 명령을 사용하여 새 터미널에서 Ruby on Rails 서버를 실행하는 방법을 알아 내려고합니다.
zlog

그것은 합리적으로 들립니다-열린 터미널에 stdout이 나타나기를 원합니다. 이 경우 예, 원하는 작업을 수행하는 쉘 스크립트를 작성하고 다음과 같이 확장자를 .command로 변경하려고합니다.
Norman Grey

답변:


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

새 터미널이 열리고 "echo hello"명령이 실행됩니다.


나는 이것이 애플 스크립트 전문가에게 분명하다고 확신하지만 어떤 프로그램을 시작하는 예제는 어떻습니까? 기본적으로 'xterm -e somecomnand'를 할 수있는 것처럼
gman

3
이것은 약간 짧을 수 있습니다 :osascript -e 'tell app "Terminal" to do script "echo hello"'
joemaller

1
새 터미널 창 상단을 활성화하는 방법은 무엇입니까?
Jenkamen

그리고 "$@"쉘에서 그러나 osa 스크립트에서 라인을 따라 인수를 어떻게 전달 합니까?
rednoah

3

로터리 방식으로 할 수 있습니다.

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

확장명 .command이 있고 실행 가능한 셸 스크립트를 두 번 클릭하여 새 터미널 창에서 실행할 수 있습니다. open아시다시피이 명령 은 Finder 객체를 두 번 클릭하는 것과 동일하므로이 절차를 수행하면 새 터미널 창에서 스크립트의 명령이 실행됩니다.

약간 비틀었지만 작동하는 것처럼 보입니다. 나는 이것에 대한 더 직접적인 경로 가 있어야 한다고 생각 합니다 (실제로 무엇을하려고합니까?). 그러나 그것은 지금 나를 탈출합니다.


나는 이것을 시도하고 새로운 터미널이 열리지 만 ~ $ /Users/username/Work/Dev/scripts/hello.command; 출구; 로그 아웃 [프로세스 완료] my hello.command : scripts $ cat hello.command #! / bin /
sh-

Ack, 제대로 포맷되지 않았지만 아이디어가 있다고 생각합니다.
zlog

@ zlog : 그러나 '안녕하세요'라고 말했습니까? Terminal.app의 환경 설정에서 '설정'과 '쉘'탭을 참조하십시오. '쉘이 종료 될 때'메뉴가 나타납니다. 기본 설정은 '창을 닫지 마십시오'라고 생각합니다. 이것을 쉘이 완전히 종료되면 닫기로 변경하면 쉘 스크립트가 완료되면 터미널 창이 사라집니다.
Norman Grey

세션을 열어두고 로그 아웃하지 않도록 명령 할 수 있습니까?
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

루비 1.9가 필요하거나 require 'rubygems'다른 사람들이 요구하기 전에 줄을 추가 해야하며 설치하는 것을 잊지 마십시오 gem rb-appscript.

이 스크립트 dt(dup tab)의 이름을 지정 했으므로 dt동일한 폴더에서 탭을 열거 나 dt ls거기에서 ls명령을 실행할 수도 있습니다 .


2

이것은 적어도 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 

0

나는 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와 같은 것을 입력 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.