скажите iTerm, чтобы открыть несколько сессий SSH - PullRequest
0 голосов
/ 27 марта 2012

Я использовал несколько интересных примеров из прикрепленных URL. Пока что у меня есть скрипт, открывающий несколько вкладок с сессией ssh. Но так как у меня есть несколько клиентов, к которым я подключаю сервер, я не хочу, чтобы скрипт с жестко закодированным списком для каждого клиента. Я хочу, чтобы диалоговое окно спрашивало, к какому списку я бы хотел подключиться ...

Но теперь, когда я попытался добавить диалог, я застрял:

--set wseServer to {"xen", "bcs", "db", "lx", "mgr", "nx", "proxy", "smb", "wiki", "zarafa"} as list
set wseServer to paragraphs of (do shell script "/bin/cat $HOME/.ssh/hostlist-wse-deb.pssh")
--set edlServer to {"edl", "edev", "edb", "emon"}
set edlServer to paragraphs of (do shell script "/bin/cat $HOME/.ssh/hostlist-edl.pssh")
set allServer to wseServer & edlServer

set serverList to button returned of (display dialog "Dude, choose your prefered connection List" buttons {"wseServer", "edlServer", "allServer"} with title "SSH Server" default button 3 with icon caution giving up after 5)

tell application "iTerm"
activate
set myTerm to (make new terminal)
tell myTerm
    repeat with hostItem in serverList
        set Lsession to (make new session)
        tell Lsession
            --set secureshell to hostItem exec command "ssh " & hostItem
            exec command "ssh " & hostItem
            --sleep to prevent errors if we spawn too fast
            do shell script "/bin/sleep 0.01"
        end tell
    end repeat
end tell
end tell

После выбора одного из элементов в диалоговом окне iterm открывает 8 вкладок, не выполняет ssh и закрывает их ... Нет ошибок, нет ничего!

Вот пример, который я пытаюсь расширить: http://code.google.com/p/iterm2/wiki/AppleScript

Я знаю, что я почти у цели, но не вижу решения!

Надеюсь, у одного из вас есть подсказка ...

Спасибо заранее

Ответы [ 2 ]

0 голосов
/ 22 июля 2013

Это может быть полезно: https://raw.github.com/luismartingil/scripts/master/iterm_launcher02.applescript

#!/usr/bin/osascript
-- Applescript to launch iterm2 terminals/tabs with configurable:
-- ~ List of commands <cmds>
-- ~ Color <color>
-- ~ Name <name>
-- ~ Transparency <trans>
-- ~ Zoom out <zoomout>
-- ~ Split behavior horizontal(h) or vertical(v) <split> :: (h, v)
--
-- Run from terminal with `osascript` or just ./<<script>>
-- Dont unfocus with the mouse/keyboard while executing. the script.
-- Recomended to go full screen (CMD + Enter) if <zoomout> attributes used.
-- Change myTermWindow and myItem(s) as desired.
--
--
-- Author: Luis Martin Gil http://www.luismartingil.com
-- Year : 2013

tell application "iTerm"

    -- First tab
    set myItem1 to {}
    set myItem1 to myItem1 & {{color:"yellow", cmds:{"echo yellow", "ls -lrt"}, name:"name_yellow", trans:"0.1", zoomout:4, split:"h"}}
    set myItem1 to myItem1 & {{color:"blue", cmds:{"echo blue1", "ls -lrt"}, name:"name_blue1", trans:"0.1", zoomout:2, split:"v"}}
    set myItem1 to myItem1 & {{color:"blue", cmds:{"echo blue2", "ls -lrt"}, name:"name_blue2", trans:"0.1", zoomout:4, split:"v"}}
    set myItem1 to myItem1 & {{color:"blue", cmds:{"echo blue3", "ls -lrt"}, name:"name_blue3", trans:"0.1", zoomout:6}}

    -- Second tab   
    set myItem2 to {}
    set myItem2 to myItem2 & {{color:"red", cmds:{"echo red1", "ls -lrt"}, name:"name_red1", trans:"0.1", zoomout:8, split:"h"}}
    set myItem2 to myItem2 & {{color:"red", cmds:{"echo red2", "ls -lrt"}, name:"name_red2", trans:"0.1", zoomout:4}}

    -- Third tab
    set myItem3 to {}
    set myItem3 to myItem3 & {{color:"green", cmds:{"echo green", "ls -lrt"}, name:"name_green", trans:"0.1", zoomout:2, split:"v"}}
    set myItem3 to myItem3 & {{color:"purple", cmds:{"echo purple", "ls -lrt"}, name:"name_purple", trans:"0.1", zoomout:4}}

    set myTermWindow to {myItem1, myItem2, myItem3}

    set myterm to (make new terminal)

    tell myterm
        repeat with n from 1 to count of myTermWindow
            launch session n
            repeat with i from 1 to count of (item n of myTermWindow)
                -- Lets set the properties of the actual tab
                tell the last session to set name to name of (item i of (item n of myTermWindow))
                tell the last session to set background color to color of (item i of (item n of myTermWindow))
                tell the last session to set transparency to trans of (item i of (item n of myTermWindow))
                -- Some commands might require more columns to be readable
                repeat zoomout of (item i of (item n of myTermWindow)) times
                    tell i term application "System Events" to keystroke "-" using command down
                end repeat
                -- Lets execute the commands for the tab
                repeat with cmd in cmds of (item i of (item n of myTermWindow))
                    tell the last session to write text cmd
                end repeat
                -- Split the pane in a "D" (vertical) or "d" (horizontal) way
                if i is less than (count of (item n of myTermWindow)) then
                    if "h" is split of (item i of (item n of myTermWindow)) then
                        set split_str to "D"
                    else if "v" is split of (item i of (item n of myTermWindow)) then
                        set split_str to "d"
                    else
                        error
                        return
                    end if
                    tell i term application "System Events" to keystroke split_str using command down
                end if
            end repeat
        end repeat
    end tell
end tell
0 голосов
/ 28 марта 2012

Ответьте себе, так что, надеюсь, это поможет и другим:

удалил все, что находится выше "рассказать приложение ...", и добавил следующее:

set sshList to {"WSE", "EDL", "Alle"}
set sshServer to choose from list sshList with title "SSH Server"
if sshServer = {"WSE"} then set serverList to paragraphs of (do shell script "/bin/cat $HOME/.ssh/hostlist-wse-deb.pssh")
if sshServer = {"EDL"} then set serverList to paragraphs of (do shell script "/bin/cat $HOME/.ssh/hostlist-edl.pssh")
if sshServer = {"Alle"} then set serverList to paragraphs of (do shell script "/bin/cat $HOME/.ssh/hostlist-wse-deb.pssh & /bin/cat $HOME/.ssh/hostlist-edl.pssh")

Диалог отсутствуеткак с первой попытки, но это сработало ...

...