Não é possível criar um alias permanente no Mac OS

0

No Linux, posso adicionar alias ao bashrc e ele se tornará um alias permanente. No Mac OS, tentei fazer o mesmo:

vim ~ / .bashrc

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

Dito isto, recebi isto:

$ alias
alias rvm-restart='rvm_reload_flag=1 source '\''/Users/alex/.rvm/scripts/rvm'\'''

Então, onde está o meu prj alias? Eu reiniciei o laptop, mas nada mudou.

$ cat ~/.profile

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
test -f ~/.bashrc && source ~/.bashrc

$ cat ~/.bashrc
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
    
por アレックス 11.06.2014 / 03:45

2 respostas

2

Normalmente, bash apenas origina o arquivo de script de inicialização ~/.bashrc para shells interativos, sem login .
Geralmente, bash apenas origina o arquivo de script de inicialização ~/.profile para shells interativos login .
Geralmente, o Terminal.app trata as novas janelas de terminal como shells interativos de login . Portanto, em circunstâncias normais, somente seu ~/.profile é lido e executado; seu ~/.bashrc nunca é lido e executado.

Para resolver isso, eu geralmente crio o script de inicialização do shell chamado ~/.profile (se ele ainda não existir) e adiciono o seguinte comando a esse arquivo para verificar se o arquivo ~/.bashrc existe, e fontes (lê e executa dentro do processo shell atual, não subshell) se existir:

test -f ~/.bashrc && source ~/.bashrc

Reformulando conforme solicitado: O aplicativo Terminal do Mac OS X geralmente executa seu shell ( bash ) no modo "login". Quando bash é executado no modo de login, ele não lê / executa ~/.bashrc . Em vez disso, lê e executa ~/.profile . Se você quiser colocar coisas em seu ~/.bashrc e tê-las lidas e executadas em todas as novas janelas do Terminal, você precisa criar um arquivo de script chamado ~/.profile , e ter esse arquivo contendo um comando que procure por seu ~/.bashrc e lê e executa.

No caso de o verbo "source" lançar você: "sourcing" um arquivo de script shell é quando um shell (como bash ) lê os comandos shell de um arquivo e executa esses comandos no processo shell atual , então eles afetam o ambiente do atual processo de shell . Normalmente, outros arquivos de script de shell que você escreve não são originados ; em vez disso, eles são executados em um subcampo (uma instância ou cópia separada de bash ) e não podem alterar nada no ambiente de seu shell pai (a instância principal de bash que foi iniciada quando você abriu a nova janela do Terminal).

Para obter um shell para criar um script, use o comando source , que é incorporado ao shell. Um atalho para o comando source é . (sim, apenas um caractere ponto / período / ponto final). Em uma versão anterior dessa resposta, usei o operador . em vez do comando source .

    
por 11.06.2014 / 05:13
0

Você abriu uma nova janela de terminal ou executou source ~/.bashrc após a edição? O terminal atual precisa ser atualizado para os caminhos / aliases.

$ vim ~/.bashrc
alias prj='cd ~'
:x
$ alias
$ alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''
$ source ~/.bashrc
$ alias
$ alias prj='cd ~'
  alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''
    
por 11.06.2014 / 05:15