Скрипт Bash для псевдонима SSH. Лучший / оптимальный способ сделать это? - PullRequest
1 голос
/ 07 мая 2011

Я написал следующий скрипт для изменения цвета оболочки в зависимости от того, к какому хосту я пытаюсь подключиться.И, хотя это работает, мне интересно, есть ли лучший способ сделать что-то?В частности, существует ли более перекрестный способ изменения цвета подсказки?Кроме того, есть ли лучший подход к применению регулярного выражения к имени хоста (вне grep / ack)?

В любом случае, вот код:

function ssh() {

    #save all args (makes it easier to pass to ssh later)
    local all_args=$*

    #save path to ssh exec in current $PATH
    local ssh_path=$(which ssh)

    # host is second to last arg. see ssh -h
    local host=${@:(-2):1}


    #### color codes for tput ####
    # setaf=foreground, setab=background
    # 0 Black
    # 1 Red
    # 2 Green
    # 3 Yellow
    # 4 Blue
    # 5 Magenta
    # 6 Cyan
    # 7 White
    # sgr0 reset
    ##############################

    #### Or if you're on a Mac ####
    # you can use an AppleScript to
    # change to a different Terminal
    # setting. I use Pro (white/black)
    # by default, but jump to a custom
    # one called 'mpowell-md' which
    # is a shade of red when connecting
    # to mpowell-md
    ###############################

    case $host in

            # can use basic regex here
            *mpowell\-md*)
                    # osascript -e "tell application \"Terminal\" to set current settings of first window to settings set named \"mpowell-md\""
                    tput setaf 1;#red
            ;;

            # default case
            *)
                    # could default to setting it back to Pro, etc...
                    # osascript -e "tell application \"Terminal\" to set current settings of first window to settings set named \"Pro\""
            ;;
    esac

    #run and wait for ssh to finish
    eval "$ssh_path $all_args"


    tput sgr0;#reset
    #osascript -e "tell application \"Terminal\" to set current settings of first window to settings set named \"Pro\""
}

Дайте мне знать, что выдумай и спасибо!

- Мэтт

1 Ответ

3 голосов
/ 08 мая 2011

PS1 работает довольно хорошо как относительно неинвазивное, но заметное место, чтобы дать визуальный индикатор того, где вы находитесь. Он также оставляет остальную часть оболочки нетронутой, что важно, если у вас есть другие цвета, активные в оболочке (например, отображение файлов разных типов в разных цветах).

Например, мы применяем этот стиль к коробкам и используем разные цвета для prod, uat, stg, dev и т. Д.

например.

PS1="[\!]:[\w]\n[\u@\h] \[\033[1m\]\[\033[41m\] $SOME_VARIABLE \[\033[0m\] $ "

, так что это дает приглашение на 2 строки, как

[501]:[/home/matt]
[matt@mybox] FOO $ 

где FOO имеет сплошной красный фон (в этом примере).

PS1 - это функция sh (и варианты) между прочим.

...