현재 공간에서 새 터미널 창을 여는 Applescript


14

예, Apple Script에 대한 끔찍한 초보자 경험이 있습니다.

현재 데스크탑 공간에서 새 터미널 창을 열어야합니다. 터미널이 실행중인 다른 공간으로 이동 한 다음 다른 터미널 창을 열지 마십시오.

물론, 터미널이 실행되고 있지 않으면 새로운 터미널 프로세스를 시작해야합니다.

답변:


18
tell application "Terminal"  
    do script " "  
    activate  
end tell

이상하게 보이지만 터미널이 들어오는 "do script"명령을 처리하는 방식이 이상합니다. 각각에 대해 새 창을 만듭니다. 원하는 경우 실제로 유용한 것으로 바꿀 수 있습니다. 새 창을 연 직후에 원하는 것을 실행합니다.


1
이것은 작동하지만 OSX는 여전히 터미널 창이 열려있는 공간으로 공간을 자동으로 이동시킵니다. 시스템 환경 설정에서 해당 기능을 비활성화하면 기능이 수정되지만 이제 다른 모든 응용 프로그램이 더 이상 해당 응용 프로그램의 열린 창이있는 공간으로 이동하지 않습니다. 윈도우가 나타나지 않는 것을 찾기 위해 앱을 시작하는 것이 싫습니다. 맨 위의 메뉴 막대 만 응용 프로그램에 포커스가 있음을 보여줍니다. 기괴한.
Chev

15

do 스크립트 ""사이에 텍스트가 없으면 터미널에 추가 명령 프롬프트가 표시되지 않습니다.

tell application "Terminal"  
    do script ""  
    activate  
end tell

1
답변으로 남겨두면 괜찮습니다. @jfm의 답변을 수정하여 제안을 개선하고 삭제할 수 있습니다.
slhck

8

나는 그것을하는 세 가지 방법을 생각할 수 있습니다 (처음 두 곳은 다른 곳에서 도난 당했지만 어디서 잊어 버렸습니다). 매번 새 창을 열고 싶어하기 때문에 애플 스크립트에서 쉘 스크립트를 호출하는 세 번째 것을 사용합니다.

최소 10.10 이후 OS X에 내장 된 스크립트와 달리,이 모든 것은 파인더 창의 현재 작업 디렉토리 인 디렉토리에 관계없이 터미널을 엽니 다 (즉, 열기 위해 폴더를 선택할 필요가 없습니다).

또한 파인더> 터미널> 파인더 서클을 완성하기위한 몇 가지 bash 함수가 포함되었습니다.

1. 기존 탭을 재사용하거나 새 터미널 창을 만듭니다.

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of myDir in window 1
    else
        do script "cd " & quoted form of myDir
    end if
    activate
end tell

기존 탭을 재사용하거나 새 터미널 탭을 만듭니다.

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
        activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of myDir in window 1
end tell

3. Applescript에서 호출 한 쉘 스크립트를 통해 매번 새 창을 생성하십시오

tell application "Finder"
    set myDir to POSIX path of (insertion location as alias)
    do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell

4. (BONUS) 터미널의 현재 작업 디렉토리에 대한 새로운 파인더 창을 여는 Bash 별명

이 별칭을 .bash_profile에 추가하십시오.

alias f='open -a Finder ./' 

5. (BONUS) 터미널 창의 디렉토리를 전면 파인더 창의 경로로 변경하십시오.

이 함수를 .bash_profile에 추가하십시오.

cdf() {
      target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
}

0

위의 답변은 터미널이 이미 실행중인 경우에만 작동합니다. 그렇지 않으면 두 개의 터미널 창이 한 번에 열립니다 . do script하나는 하나이기 때문입니다 activate.

다음과 같은 경우 간단한 방법으로 이것을 막을 수 있습니다.

if application "Terminal" is running then
    tell application "Terminal"
        do script ""
        activate
    end tell
else
    tell application "Terminal"
        activate
    end tell
end if

보너스:

직접 명령을 실행하려면 키 입력을 통해이 작업을 수행 할 수 있습니다 (매우 우아하지는 않습니다!하지만 작동합니다)

[...]
else
    tell application "Terminal"
        activate
        tell application "System Events" to keystroke "ls -la" 
        tell application "System Events" to key code 36
    end tell
end if
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.