Meu analisador de alias funciona na linha de comando, mas não em um script

2

Estou tentando criar um script simples que despeje todos os meus aliases em um arquivo que o bash carregue quando for iniciado, certificando-se de que o alias de - to popd funcione corretamente:

alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases

Se eu executar isso na linha de comando, parece funcionar, mas se eu colocá-lo em um script e executá-lo (com #!/bin/bash na parte superior e chmod +x ), em vez disso, recebo um arquivo vazio. Alguém pode me dizer que pedaço de tradição bash eu sinto falta?

Se for importante, estou usando o bash v4.2.10.

    
por Wolf 01.06.2011 / 22:11

2 respostas

3

Um shell script herda as variáveis de ambiente do programa de chamada e tal, mas não herda coisas como aliases e histórico de comandos.

Se todos os aliases estiverem em um local comum, como ~/.bashrc , você poderá inserir esse arquivo em seu script primeiro:

. $HOME/.bashrc

Então você teria, no contexto de execução do script de shell, todos os alias definidos no arquivo .bashrc .

Se seus aliases forem definidos em todo o lugar, não há uma maneira fácil de consolidá-los. Você teria que escrever isso "salvar todos os meus aliases" como uma função. Você poderia colocar algo assim em seu ~/.bash_profile , por exemplo:

function dumpalias {
    alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases
}

Depois de sair e voltar a entrar, pode dizer dumpalias para obter o comportamento pretendido.

    
por 01.06.2011 / 22:49
0

Ao colocá-lo em um script e executá-lo, você está iniciando um novo shell, que não herda os aliases do seu shell atual. Então, o script está salvando os aliases do shell; simplesmente não há aliases definidos no shell onde esses comandos são executados.

Você pode fornecer o script para executá-lo na atual concha:

. /path/to/script

Você também pode escrevê-lo como uma função de shell .

    
por 01.06.2011 / 22:43

Tags