Como posso limpar meu arquivo bashrc / zshrc?

1

Com o tempo, adicionei um monte de coisas ao meu PATH e parece horrível. Como posso limpar isso ou qual é a maneira correta de "reformatar" tudo isso?

export PATH="$PATH:~/scripts"
export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools/adb"
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools:~/Downloads/android-sdk-mac_x86/tools:~/Downloads/android-sdk-mac_x86/platform-tools/adb"
export PATH="$PATH:~/bin"
export PATH="$PATH:~/bin/subl"
export PATH="$PATH:~/.rvm/gems/ruby-1.9.3-head/gems/git-media-0.1.1/bin"

export PATH=$PATH:$HOME/bin:/Users/me/Downloads/android-sdk-mac_86/tools
export PATH=$PATH:$HOME/bin:/Users/me/Downloads/android-sdk-mac_86/platform-tools
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/.rvm/scripts/rvm:/.rvm/scripts/rvm:/~/Downloads/android-sdk-mac_x86/tools/android:/~/Downloads/android-ndk-r7/:/~/Downloads/android-sdk-mac_x86/platform-tools
export CC=gcc-4.2
export PATH=~/Downloads/android-ndk-r7:$PATH
ANDROID_HOME=~/Downloads/android-sdk-mac_x86
export PATH=${PATH}:$ANDROIDHOME/platform-tools
    
por LuxuryMode 05.04.2012 / 16:26

4 respostas

3

No Bash, você só precisa exportar a variável uma vez, não em cada atribuição. Remova a exportação de todas as suas atribuições do PATH e, em seguida, coloque export PATH em uma linha sozinha no final. Se você está apenas definindo a variável uma vez, como com CC, então exportar na frente dele está bem. Você também pode exportá-los usando um único comando, como com export PATH CC ANDROID_HOME .

O tarball de distribuição para o Bash vem com várias funções convenientes para adicionar ou anexar um caminho a uma variável. Eu acho que eles estão em um arquivo de contribuição chamado "pathfuncs". Eles podem tornar seu arquivo rc muito mais legível.

  • add_path adicionará a entrada ao final da variável PATH
  • pre_path adicionará a entrada ao início da variável PATH
  • del_path removerá a entrada da variável PATH, onde quer que seja

Se você especificar uma variável como o segundo argumento, ela usará isso em vez de PATH.

Por conveniência, aqui estão elas:

# is $1 missing from $2 (or PATH) ?
no_path() {
    eval "case :\$${2-PATH}: in *:$1:*) return 1;; *) return 0;; esac"
}
# if $1 exists and is not in path, append it
add_path () {
  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
  no_path $* || eval ${2:-PATH}='eval echo :'$'${2:-PATH}: |
    sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"'
}

Se você adicioná-los ao seu arquivo de inicialização bash, você pode adicionar ao seu PATH assim:

pre_path $HOME/bin
add_path /sbin
add_path /usr/sbin

Ou especifique uma variável diferente:

pre_path $HOME/man MANPATH
pre_path $HOME/share/man MANPATH
add_path /usr/local/man MANPATH
add_path /usr/share/man MANPATH

Eu uso esse método em meus arquivos rc colocando os pre_paths primeiro e add_paths em segundo lugar. Faz todas as minhas mudanças de caminho fáceis de entender de relance. Outro benefício é que as linhas são curtas o suficiente para que eu possa adicionar um comentário à direita de uma linha, se necessário.

E como estas são funções, você pode usá-las interativamente a partir da linha de comando, como por exemplo, add_path 'pwd' para adicionar o diretório atual ao caminho.

Editar: Corrigindo seu arquivo rc fornecido com as funções acima, eu tenho isto:

pre_path /opt/local/bin
pre_path /opt/local/sbin
pre_path ~/Downloads/android-ndk-r7

add_path ~/scripts
add_path ~/Downloads/android-sdk-mac_x86/platform-tools
add_path ~/Downloads/android-sdk-mac_x86/tools
add_path ~/Downloads/android-sdk-mac_x86/platform-tools/adb
add_path ~/bin
add_path ~/bin/subl
add_path ~/.rvm/gems/ruby-1.9.3-head/gems/git-media-0.1.1/bin
add_path $HOME/bin
add_path /Users/me/Downloads/android-sdk-mac_86/tools
add_path /Users/me/Downloads/android-sdk-mac_86/platform-tools
add_path /usr/local/bin
add_path /usr/bin
add_path /bin
add_path /usr/sbin
add_path /sbin
add_path /usr/X11/bin
add_path /.rvm/scripts/rvm
add_path /.rvm/scripts/rvm
add_path /~/Downloads/android-sdk-mac_x86/tools/android
add_path /~/Downloads/android-ndk-r7/
add_path /~/Downloads/android-sdk-mac_x86/platform-tools

ANDROID_HOME=~/Downloads/android-sdk-mac_x86
add_path $ANDROID_HOME/platform-tools

export PATH
export CC=gcc-4.2

Você tem alguma limpeza para remover duplicatas e colocar as coisas em ordem.

    
por 05.04.2012 / 17:52
1

Você não precisa disso

export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools/adb"

desde que adb é um executável.

Neste:

export PATH="$PATH:~/Downloads/android-sdk-mac_x86/platform-tools:~/Downloads/android-sdk-mac_x86/tools:~/Downloads/android-sdk-mac_x86/platform-tools/adb"

Você pode se livrar das coisas depois do cólon (uma repetição do adb acima).

Neste:

exportar

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/.rvm/scripts/rvm:/.rvm/scripts/rvm:/~/Downloads/android-sdk-mac_x86/tools/android:/~/Downloads/android-ndk-r7/:/~/Downloads/android-sdk-mac_x86/platform-tools

você está repetindo as ferramentas de plataforma (última entrada) e android (2ª última entrada).

Tente colocar cada adição de PATH em uma linha e todos os dups pularão em você.

    
por 05.04.2012 / 16:29
1

Você pode colocar todas as modificações do caminho em uma única linha, por exemplo,

export PATH="$PATH:~/scripts:~/bin:~/bin/subl"

etc, mas isso não o tornaria mais legível.

Na linha 11, no entanto, você faz mais ou menos o acima. Pelo menos você não ajustou todas as mudanças de caminho feitas na linha 1-10, então você pode simplesmente remover a linha 1-10. Você pode mesclar depois $PATH changes para contê-lo em uma única linha, mas como eu disse, será uma única linha incompreensível.

    
por 05.04.2012 / 16:35
1

Apenas um pensamento rápido: eu provavelmente escreveria algo assim:

function addpath() {
    [[ -d "$1" ]] || return 1

    print -rl ${(s.:.)PATH} | grep -q "$1"
    [[ $? != 0 ]] || return 1

    path+="$1"
}

Em seguida, colocarei meus caminhos (separados por novas linhas) para cada máquina em que essa configuração zsh estiver sendo executada em um arquivo como, por exemplo, .zsh/paths.d/host1 e aplica esta função em todas as linhas do arquivo selecionado ...

    
por 05.04.2012 / 16:58

Tags