Coloque automaticamente um alias em ~ / .bashrc ou ~ / .zshrc [duplicado]

4

Existe uma linha de comando util / script que salva automaticamente os aliases? Por exemplo,

save-alias my-ip="curl ipecho.net/plain"

e isso irá definir um apelido, então adicione / atualize em ~ / .bashrc ou ~ / .zshrc

Eu estava pensando em escrever um script que definiria um alias e salvaria-o automaticamente. Ter que adicionar manualmente um alias a cada vez ao arquivo de configuração é chato. Mas pensei que talvez eu fosse reinventar a roda e que vocês já tenham alguma solução para esse aborrecimento.

EDIT: Acabei por escrever o script que você pode encontrar nas respostas.

    
por Don Manley 05.09.2014 / 16:39

3 respostas

0

Acabei escrevendo este roteiro. Eu explico por que no final.

Adiciona novos aliases ao arquivo .aliases e os carrega imediatamente. Ele não acrescenta duplicatas duas vezes, portanto, se você definir o mesmo alias mais de uma vez, ele atualizará as versões anteriores, em vez de enviar spam para seu arquivo de configuração com duplicatas.

ALIASES_FILE_PATH=$HOME/.aliases

function save-alias() {

    ALIAS_NAME='echo "$1" | grep -o ".*="'

    # Deleting dublicate aliases
    sed -i "/alias $ALIAS_NAME/d" $ALIASES_FILE_PATH

    # Quoting command: my-alias=command -> my-alias="command"
    QUOTED='echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"'

    echo "alias $QUOTED" >> $ALIASES_FILE_PATH

    # Loading aliases
    source $ALIASES_FILE_PATH
}

Outra versão

Em vez de usar um arquivo separado para aliases, ele os armazena no próprio arquivo de configuração (.zshrc ou .bashrc). Ele também anexa aliases apenas a um local especificado no arquivo de configuração, para que você possa manter outras coisas abaixo dos aliases, se quiser. Ele adicionará os aliases antes de "# END ALIASES", portanto, certifique-se de ter essa string exata. Então, por exemplo, seu arquivo de configuração ficará assim:

plugins=(git)
#and bla bla bla

# ALIASES
alias test-alias="echo I was added automatically"
# END ALIASES

# Yes you can have the bottom of the config file free.
# Because it will store aliases inside ALIASES block 
source $ZSH/oh-my-zsh.sh
# and etc

O que é realizado pelo seguinte código:

CONFIG_PATH=$HOME/.zshrc

function save-alias() {

    ALIAS_NAME='echo "$1" | grep -o ".*="'


      # Checking whether the alias name is empty. 
      # Otherwise sed command later will match and delete every alias in the file
    if [[ -z "$ALIAS_NAME" ]]; then
      echo 'USAGE: save-alias alias_name="command" ' 1>&2
      echo '       save-alias hello="echo hello world" \n' 1>&2
      echo "Wrong format. Exiting..." 1>&2
      exit 1
    fi

    # Deleting dublicate aliases
    sed -i "/alias $ALIAS_NAME/d" $CONFIG_PATH

    # Quoting command: my-alias=command -> my-alias="command"
    QUOTED='echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"'

    # Appending the command to the config (before "# END ALIASES")
    sed -i "/# END ALIASES/i alias $QUOTED" $CONFIG_PATH

    #reloading config file.
    source $CONFIG_PATH
    # instead of reloading the whole config you might want to append
    # to a new file as well, then source it and then rm new file
}

Por que não outras soluções apresentadas aqui?

echo "alias ${1}" >> $HOME/.bash_aliases

Existem dois problemas com eles.

1. Citações são removidas

Com o comando acima (representado como "save-alias"), o seguinte falhará

save-alias test-alias="echo hello world"

Ele falhará porque aspas serão removidas e anexará o comando como

alias test-alias=echo hello world

e falhará com os seguintes erros:

bash: alias: hello: not found
bash: alias: world: not found

A solução é usar aspas duplas:

save-alias test-alias='"echo hello world"'

que é um pouco chato

2. Eles acrescentam duplicatas.

Se você executar um comando duas vezes, descobrirá que o mesmo alias será adicionado duas vezes ao arquivo de configuração:

alias test-alias="echo hello world"
alias test-alias="oh no the config file is getting spammed" 
    
por 06.09.2014 / 00:33
2

Para adicioná-lo e também disponibilizá-lo imediatamente:

# In your .bashrc or .bash_profile file, add:
newalias() {echo "alias ${1}" >> $HOME/.bash_aliases; source ~/.bash_aliases; }

Isso implica em usar um arquivo .bash_aliases e com origem em .bashrc ou .bash_profile , com a linha

. ~/.bash_aliases

Algumas pessoas podem não ter o arquivo .bash_aliases inicialmente e apenas ter seus aliases atualmente definidos em .bashrc ou .bash_profile . Isso ainda funcionará porque >> criará o arquivo .bash_aliases se ele não existir atualmente, caso contrário, ele será anexado a ele. No entanto, você pode precisar fazer a etapa manual de adicionar a referência a ela e pode considerar a possibilidade de mover aliases existentes para ela nesse ponto.

    
por 05.09.2014 / 17:19
1

Essa é realmente uma boa ideia. Eu criaria a função:

addalias() {
    echo "alias ${1}" >> $HOME/.bash_aliases
}

Adicione isso ao meu .bashrc , faça logout e faça o login novamente.

O uso é:

addalias ..='cd ../../'
    
por 05.09.2014 / 16:44

Tags