Làm cách nào tôi có thể viết một tập lệnh để mở nhiều tab thiết bị đầu cuối và thực thi mã trong đó?


8

Tôi muốn có thể mở ứng dụng đầu cuối và để nó tự động chạy một tập lệnh mở một số tab và chạy một tập lệnh tùy ý trong mỗi lệnh. Ví dụ, tôi muốn một tab để mở, thay đổi thư mục và chạy máy chủ rails; có một thư mục mở khác, thay đổi và theo dõi một tệp nhật ký; Vân vân..

Có cách nào để làm điều này với một kịch bản shell hay applescript không?

Tôi đã tìm thấy câu hỏi này nhưng nó dường như bị treo nếu tôi muốn mở các tab với các lệnh không kết thúc (như chạy máy chủ rails).

Câu trả lời:


5

Đây là một chút hacky, nhưng bạn có thể đạt được điều này trong AppleScript. Nếu có một số lượng tab được xác định trước mà bạn muốn và các lệnh đặt trước bạn muốn chạy, điều này không khó.

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

Tất nhiên, thay thế firstCommandbằng bất kỳ lệnh nào bạn thực sự muốn chạy, v.v. Vì bất kỳ lý do gì, Terminal không thực sự có một cách có thể truy cập để tạo các tab mới thông qua AppleScript, do đó, dòng tìm kiếm dài, khó hiểu ở giữa chỉ yêu cầu Terminal nhập Tđể mở tab mới đó và sau đó các lệnh mới sẽ thực thi trong đó.

Bạn có thể chạy AppleScript này hoặc sử dụng nó trong Automator để tạo một dịch vụ mới, sau đó bạn có thể thực thi từ bất cứ đâu bằng phím tắt nếu bạn muốn.

Extras - Nếu bạn muốn kích hoạt một số tập lệnh / lệnh trong phiên cuối mới được mở, bạn có thể tham khảo điều này


2

Đây là tập lệnh shell sẽ làm những gì bạn muốn - cho cả Terminal của Apple hoặc iTerm (chúng tôi có người dùng của cả hai).

Đối với các tab mà bạn mở, điều này sẽ thực thi một tệp bó khác trong mỗi tab, chẳng hạn như một cho tomcat, một cho bạn db, v.v.

#!/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

Vì việc mở một tab mới rất tầm thường, tôi khuyên bạn nên thực hiện các lệnh của mình tầm thường nhất có thể và thực hiện theo cách cũ.

Bạn đã gọi ra hai hành động cụ thể, vì vậy hãy làm việc với những hành động đó. Lưu ý rằng tôi sẽ đưa ra rất nhiều giả định dựa trên những gì tôi biết về Rails, nhưng không nhất thiết phải cụ thể cho dự án của bạn.

Để cắt ngắn một câu chuyện dài, bí danh một lệnh để làm những gì bạn muốn, hoặc tạo một kịch bản shell tầm thường để làm những gì bạn muốn.

Tạo một tập lệnh shell có tên myapp.start, với nội dung:

#!/bin/bash

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

Bạn cũng có thể phải tạo một tệp có tên .bash_profile trong thư mục chính của bạn hoặc sửa đổi một tệp đã tồn tại và thêm một dòng như;

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

Sau đó, tạo một thư mục bin trong thư mục nhà của bạn và di chuyển tập lệnh myapp.start vào nó. Đảm bảo nó cũng có bit thực thi của chủ sở hữu ở mức tối thiểu ( chmod 700 myapp.start).

Sau đó, mở Terminal.app, gõ myapp.startvà bạn có đường ray đang chạy. Hoặc, nhập myarồi nhấn Tabvà để tự động điền vào phần còn lại, nhấn return. Boom, máy chủ đang chạy.

Theo tiện ích mở rộng, bạn có thể đã hiểu cách thực hiện đuôi tệp nhật ký, nhưng tôi sẽ tiếp tục trên mọi phương diện. Tạo một tệp khác trong ~ / bin có tên myapp.taillog, với nội dung:

#!/bin/bash

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

Một lần nữa, đặt nó vào thư mục bin chmod 700 ~/bin/myapp.taillog, sau đó sau khi bắt đầu, sau đó rails server, nhanh chóng nhấn t, gõ myapp.taillogvà bạn có một tệp nhật ký được in.

Hai lệnh, hai tổ hợp phím bổ sung (mở các tab), có lẽ như vậy là đủ?

Có hai cải tiến rất rõ ràng ở đây. Một là viết một hàm shell có khả năng "khám phá" tên của các ứng dụng rails, vì vậy bạn không phải viết một kịch bản shell cho mỗi, viết một lệnh phụ được thiết kế để khởi động webbrick / máy chủ rails của bạn và các lệnh cho đuôi -F'ing một vài tệp nhật ký chính thường xuyên.

Cải tiến thứ hai là có khả năng bạn có thể viết một AppleScript thực hiện tương tác đầu cuối cần thiết và thực thi lệnh thích hợp bên trong mỗi cái. Nhưng thật lòng mà nói, tôi rất thích AppleScript và làm việc với mã bash và mã perl cả ngày, vì vậy tôi sẽ đưa ra lời khuyên liên quan đến bộ kỹ năng của mình :).


1

Mặc dù bạn có thể bị ràng buộc với thiết bị đầu cuối của Apple dựa trên cách diễn đạt câu hỏi của bạn, iTerm vượt trội hơn so với trình giả lập thiết bị đầu cuối mặc định để tạo kịch bản và quản lý nhiều cửa sổ.

Khái niệm về dấu trang cho phép dễ dàng quản lý một bộ cửa sổ. Viết kịch bản của iTerm bằng AppleScript / Automater đơn giản hơn, mạnh hơnđược ghi lại tốt hơn trên trang web của nhà phát triển . (so với thiết bị đầu cuối)

Hãy kiểm tra xem nếu bạn thấy kịch bản của thiết bị đầu cuối bình thường không đáp ứng nhu cầu của bạn. Tôi cũng khuyên bạn nên xem xét tùy chỉnh shell unix của mình để thiết lập bí danh cho các lệnh được sử dụng thường xuyên. Bạn sẽ sử dụng chúng trong kịch bản các tác vụ ban đầu cho các cửa sổ mới, nhưng bất cứ khi nào bạn ở trong trình bao và cần chuyển đổi các tác vụ thay vì phải mở một cửa sổ mới.


1

Các tập lệnh rất hay, nhưng bạn cũng có thể chỉ cần sử dụng Trình tự động để ghi lại 'Xem tôi làm' nơi bạn mở Terminal và ném một vài Command + N cho # cửa sổ ưa thích của bạn. Et voila.


1

Có một câu trả lời tuyệt vời cho một câu hỏi tương tự trên StackOverflow, nhưng có lẽ nó thuộc về đây, vì vậy tôi sẽ chỉ sao chép / pasta nó ở đây.


Điều này là hoàn toàn có thể, nhưng nó sẽ mất một số công việc từ phía bạn. Điều đầu tiên bạn cần là thiết lập từng cửa sổ / tab bạn muốn trong Cài đặt.

Tôi có 4 tab mà tôi mở tự động mỗi khi tôi mở Terminal. DB Shell, Editor, Server, Và Shell. Đây là tất cả trong Sasquatchdự án (không hỏi), do đó, việc đặt tên. Mỗi trong số chúng nên có một lệnh duy nhất liên quan đến chúng.

Trong trường hợp này, tôi đang thực thi vim. Nếu bạn tình cờ có một thư mục cụ thể mà bạn muốn bắt đầu, bạn có thể sử dụng một cái gì đó như vim ~/projects/main/. Thực sự bất cứ điều gì bạn muốn đi vào đó là lệnh shell sẽ thực thi khi mở. Bây giờ bạn cần mở tất cả các cửa sổ / tab của bạn:

  1. Đóng tất cả mọi thứ.
  2. Mở một cửa sổ mới cho mỗi hồ sơ của bạn.
    • Chuyển đến Shellmenu => New Tab/ New Window=> Chọn cấu hình bạn đã tạo ở trên.
    • Lặp lại cho mỗi cửa sổ hoặc tab bạn muốn.
  3. Khi bạn mở tất cả các cửa sổ và / hoặc tab của mình, hãy lưu chúng dưới dạng Nhóm cửa sổ.
    • Vào Windowmenu => Save Window As Group....
    • Đặt tên cho Nhóm cửa sổ của bạn (điều này hữu ích sau này).
    • Nếu bạn muốn nhóm này mở mỗi khi bạn mở Terminal, hãy chọn hộp ở dưới cùng của màn hình này, rồi nhấn lưu.
  4. Đóng tất cả Windows / Tab của bạn (thời gian để kiểm tra nó!).
  5. Mở Nhóm cửa sổ mới của bạn.
    • Chuyển đến Windowmenu => Open Window Group=> Chọn nhóm bạn vừa thực hiện.

Điều này sẽ bật lên tất cả các cửa sổ bạn vừa có, ở cùng một vị trí. Mỗi lệnh bạn thiết lập Settingsnên được khởi chạy trong các tab tương ứng.


1
Chỉ cần một lưu ý, các liên kết hình ảnh Imageshack trong câu trả lời của bạn dường như bị phá vỡ.
beporter

Thật không may, tôi không có hình ảnh, cũng như tập tin cài đặt cũ để tạo lại nó. = - [
Jack M.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.