May. 24th, 2013

henry_flower: A melancholy wolf (Default)
Btw, об шелле, вернее об ~/.bashrc.

Почему-то у народа он часто 1 и слонопотамского размера. Некоторые хранят несколько версий: 1й домашний, 2й рабочий, 3й для машин куда диплоится код, 4й для всяких раутеров, etc.

Естественно, когда в какой-то из них добавляется полезный алиас, в остальных n он отсутствует, потом в k из них вносится вручную попозже, в j никогда, что обнаруживается в самый подходящий момент.

Еще больше добавляет радости перенос прилизанного .bashrc из linux в bsd или обратно: моментально всплывают мелкие subtle differences и в комнате воздух минут 5 насыщается матом, а в дверях появляется любопытная голова.

Поэтому можно сделать так:

  $ ls .bashrc*
  .bashrc               .bashrc.Linux.bash
  .bashrc.FreeBSD.bash  .bashrc.local.bash

и

  $ cat .bash_login
  source $HOME/.bashrc

где в .bashrc есть такое:

  # Load other configs
  for i in `uname` 'local'
  do
      [ -r $HOME/.bashrc.$i.bash ] && source $HOME/.bashrc.$i.bash
  done

Т.е. для машины с лайнуксом, будут прочитаны .bashrc, bashrc.Linux.bash, .bashrc.local.bash.

- .bashrc содержит только самые общие алиасы и функции, настройка prompt, загрузка rvm.

- .bashrc.Linux.bash сдержит только специфические функции для лайнукса, например:

    alias du.1='du -h --max-depth=1'
    psg() {
            ps ax -O etime,start | grep "$1" | grep -v grep
    }

  когда в .bashrc.FreeBSD.bash это выглядит:

    alias du.1='du -h -d1'
    psg() {
            ps -axww -O etime,start | grep "$1" | grep -v grep
    }

- .bashrc.local.bash содержит специфические алиасы и функции для конкретной машины. Таймзона, локаль, редактор, всякая бесконечная хрень типа:

    cget() {
          curl -fLO  --connect-timeout 15 "$1"
    }

    chrome.extension() {
            [ -z $1 ] && {
                    echo Usage: $FUNCNAME id 1>&2
                    return 64
            }
            local name=$1.crx
            curl -RfL "https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D${1}%26uc" > $name
            [ $? -ne 0 ] && {
                    echo $FUNCNAME error: unknown id 1>&2
                    rm -f $name
                    return 1
            }
    }

  и т.д.
Comments:
  1. Oleksii Shevchuk, 2013-05-24T15:45:27.440Z

    cat ~/.bashrc 
    load_aliases(){
        if [ -d ~/.aliases.d ]; then
    for f in ~/.aliases.d/*; do
    source $f
        done
        fi
    }

    load_shell(){
        if [ -d ~/.shell.d ]; then
    for f in ~/.shell.d/*; do
    source $f
        done
        fi
    }

    if [ ! -z "${TERM}" ]; then
      load_shell
      load_aliases
    fi

  2. Henry Flower, 2013-05-24T16:37:17.580Z

    +Oleksii Shevchuk или так, только в этом примере оно прочитает файлы для чужой ОС тоже.

    способов много, главное не держать 1 гигантский ~/.bashrc со всеми потрохами, ггг


Permalink: https://plus.google.com/115290581164606462017/posts/2DiKQjjVgQf

June 2025

M T W T F S S
      1
2345678
91011 12131415
16171819202122
23242526272829
30      

Expand Cut Tags

No cut tags