여러 터미널 탭을 열고 코드를 실행하는 스크립트를 작성하려면 어떻게해야합니까?


8

터미널 응용 프로그램을 열고 여러 탭을 여는 스크립트를 자동으로 실행하고 각 탭에서 임의의 명령 집합을 실행하도록하고 싶습니다. 예를 들어 하나의 탭을 열고 디렉토리를 변경하고 Rails 서버를 실행하고 싶습니다. 다른 파일을 열고, 디렉토리를 변경하고, 로그 파일을 추가하십시오. 기타..

쉘 스크립트 나 애플 스크립트로 이것을 할 수있는 방법이 있습니까?

질문을 찾았 지만 레일 서버 실행과 같이 끝나지 않는 명령으로 탭을 열려면 중단되는 것처럼 보입니다.

답변:


5

이것은 약간 해 키지 만 AppleScript에서이를 달성 할 수 있습니다. 원하는 수의 탭이 있고 실행하려는 사전 설정 명령이 있으면 어렵지 않습니다.

tell application "Terminal"
    -- Activate it.
    activate

    set targetWindow to 0

    -- Get a window that's not busy.
    -- If there are no open windows, open one.
    if count of windows is greater than 0 then
        repeat with currentWindow in windows
            if currentWindow is not busy then
                set targetWindow to currentWindow
            end if
        end repeat
    else
        do script ""
        set targetWindow to window 1
    end if

    -- Do command 1.
    set firstCommand to "cd ~/Desktop; clear"
    do script firstCommand in targetWindow

    -- Open a new tab.
    tell application "System Events" to tell process "Terminal" to keystroke "t" using command down

    if count of windows is greater than 0 then
        repeat with currentWindow in windows
            if currentWindow is not busy then
                set targetWindow to currentWindow
            end if
        end repeat
    else
        do script ""
        set targetWindow to window 1
    end if

    -- Do command 2.
    set secondCommand to "cd /Applications; clear"
    do script secondCommand in targetWindow

    -- And so on...
end tell

물론 firstCommand실제로 실행하려는 명령 등으로 바꾸십시오 . 어떤 이유에서든 터미널에는 AppleScript를 통해 새 탭을 생성 할 수있는 방법이 없으므로 중간에 길고 길쭉한 행 T이 있으면 터미널에 새 탭을 열라고 입력 하면 새 명령이 실행됩니다.

이 AppleScript를 그대로 실행하거나 Automator에서이 서비스를 사용하여 새로운 서비스를 생성 한 다음 원하는 경우 키보드 단축키를 사용하여 어디서나 실행할 수 있습니다.

기타-새로 열린 터미널 세션에서 일부 스크립트 / 명령을 실행하려면 다음을 참조 하십시오.


2

다음은 Apple의 터미널 또는 iTerm 모두에 대해 원하는 작업을 수행하는 쉘 스크립트입니다.

열린 탭의 경우 tomcat, db 등 다른 배치 파일을 각 탭에서 실행합니다.

#!/bin/bash

function tab () {
    local cmd=""
    local cdto="$PWD"
    local args="$@"

    if [ -d "$1" ]; then
        cdto=`cd "$1"; pwd`
        args="${@:2}"
    fi

    if [ -n "$args" ]; then
        cmd="; $args"
    fi

    if [ $TERM_PROGRAM = "Apple_Terminal" ]; then
        osascript 
            -e "tell application \"Terminal\"" \
                -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
                -e "do script \"cd $cdto; clear $cmd\" in front window" \
            -e "end tell"
            > /dev/null
    elif [ $TERM_PROGRAM = "iTerm.app" ]; then
        osascript
            -e "tell application \"iTerm\"" \
                -e "tell current terminal" \
                    -e "launch session \"Default Session\"" \
                    -e "tell the last session" \
                        -e "write text \"cd \"$cdto\"$cmd\"" \
                    -e "end tell" \
                -e "end tell" \
            -e "end tell" \
            > /dev/null
    fi
}

tab path_to_script1 sh script1
tab path_to_script2 sh script2
tab path_to_script3 sh script3

1

새 탭을 여는 것은 사소한 일이므로 가능한 한 사소한 명령을 실행하고 구식으로하는 것이 좋습니다.

두 가지 특정 작업을 수행 했으므로 해당 작업을 수행하겠습니다. 내가 Rails에 대해 알고있는 것을 기반으로 많은 가정을 할 것이지만 반드시 프로젝트에만 한정되는 것은 아닙니다.

짧은 이야기를 짧게 줄이려면 명령에 별명을 지정하거나 원하는 것을 수행하는 간단한 쉘 스크립트를 작성하십시오.

myapp.start내용이 포함 된 쉘 스크립트를 작성하십시오 .

#!/bin/bash

cd Development/rails/myapp
# Do any common environment initializations here, such as RAILS_ENV=development
script/server

홈 디렉토리에 .bash_profile이라는 파일을 만들거나 이미 존재하는 파일을 수정하고 다음과 같은 줄을 추가해야 할 것입니다.

export PATH="$HOME/bin:${PATH}"

그런 다음 홈 폴더에 bin 디렉토리를 작성하고 myapp.start 스크립트를 해당 디렉토리로 이동하십시오. 또한 소유자에게 최소 비트를 실행해야합니다 ( chmod 700 myapp.start).

그런 다음 Terminal.app를 열고을 입력 myapp.start하면 레일이 실행됩니다. 또는을 입력 mya한 다음 Tab자동 완성이 나머지를 채우도록하려면을 누르십시오 return. 붐, 서버 실행 중

확장으로, 로그 파일 테일을 수행하는 방법을 이미 이해할 수도 있지만, 계속하겠습니다. ~ / bin에 myapp.taillog라는 다른 파일을 내용과 함께 만듭니다.

#!/bin/bash

tail -F ~/Development/rails/myapp/logs/development.log

다시 bin 폴더에 chmod 700 ~/bin/myapp.taillog넣은 다음 Rails 서버를 시작한 후을 빠르게 누르고을 t입력 myapp.taillog하면 로그 파일이 인쇄됩니다.

두 개의 명령, 두 개의 추가 키 (탭 열기), 아마도 충분할까요?

여기에는 두 가지 확실한 개선이 있습니다. 하나는 rails 앱의 이름을 "발견"할 수있는 쉘 기능을 작성하는 것이므로 각각에 대해 쉘 스크립트를 작성할 필요가 없으며 선택한 webbrick / rails 서버를 시작하도록 설계된 하위 명령을 작성하지 않아도됩니다. 몇 가지 키 로그 파일을 정기적으로 tail -F '명령.

두 번째 개선점은 필요한 터미널 상호 작용을 수행하는 AppleScript를 작성하고 각 명령 내에서 적절한 명령을 실행할 수 있다는 것입니다. 그러나 솔직히 AppleScript를 빨아 들이고 하루 종일 bash 코드와 perl 코드로 작업하므로 기술 세트와 관련된 조언을 제공합니다. :).


1

귀하의 질문에 따라 Apple 터미널에 연결되어있을지라도 iTerm 은 여러 창을 스크립팅하고 관리하는 기본 터미널 에뮬레이터보다 우수합니다.

책갈피 개념을 사용하면 일련의 창을 쉽게 관리 할 수 ​​있습니다. AppleScript / Automater를 사용한 iTerm 스크립팅은 개발자의 웹 사이트에보다 간단하고 강력하며 문서화되어 있습니다 . (터미널에 비해)

일반 터미널의 스크립팅이 필요에 맞지 않으면 확인하십시오. 또한 자주 사용하는 명령에 대한 별칭을 설정하기 위해 유닉스 쉘을 사용자 정의하는 것이 좋습니다. 새 창에 대한 초기 작업을 스크립팅하는 데 사용하지만 셸에있을 때마다 새 창을 열지 않고 작업을 전환해야합니다.


1

스크립트는 훌륭하지만 모두 Automator를 사용하여 터미널을 여는 'Watch Me Do'를 기록하고 원하는 창 수에 대해 Command + N을 몇 개 던질 수 있습니다. 에일 라


1

StackOverflow에 대해 비슷한 질문에 대한 훌륭한 답변 이 있지만 아마도 여기에 속할 것이므로 여기에 복사 / 붙여 넣기 만하면됩니다.


이것은 절대적으로 가능하지만 일부 작업이 필요합니다. 가장 먼저 필요한 것은 설정에서 원하는 각 창 / 탭을 설정하는 것입니다.

터미널을 열 때마다 자동으로 열리는 4 개의 탭이 있습니다. DB Shell, Editor, Server,와 Shell. 이것들은 모두 Sasquatch(요청하지 않음) 프로젝트 내에 있으므로 명명입니다. 그러면 이들 각각에 고유 한 명령이 있어야합니다.

이 경우 실행 중 vim입니다. 시작하려는 특정 디렉토리가있는 경우 다음과 같은 것을 사용할 수 있습니다 vim ~/projects/main/. 실제로 당신이 가고 싶은 것은 쉘이 열릴 때 실행할 명령입니다. 이제 모든 창 / 탭을 열어야합니다.

  1. 모든 것을 닫습니다.
  2. 각 프로필에 대한 새 창을 엽니 다.
    • Shell메뉴로 이동 => New Tab/ New Window=> 위에서 만든 프로필을 선택하십시오.
    • 원하는 각 창이나 탭에 대해 반복하십시오.
  3. 모든 창 및 / 또는 탭이 열리면 창 그룹으로 저장하십시오.
    • Window메뉴 =>로 이동하십시오 Save Window As Group....
    • 창 그룹에 이름을 지정하십시오 (나중에 유용함).
    • 터미널을 열 때마다이 그룹을 열려면이 화면 하단의 확인란을 선택한 다음 저장을 누르십시오.
  4. 모든 Windows / 탭을 닫으십시오 (테스트 할 시간입니다).
  5. 새 창 그룹을여십시오.
    • Window메뉴로 이동 => Open Window Group=> 방금 만든 그룹을 선택하십시오.

방금 가지고 있던 모든 창이 같은 위치에 나타납니다. 설정 한 각 명령 Settings은 해당 탭에서 시작해야합니다.


1
참고로, 답변의 Imageshack 이미지 링크가 깨져있는 것 같습니다.
beporter

불행히도 이미지를 만들거나 이전 설정 파일을 다시 만들 수 없습니다. =-[
Jack M.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.