Posso fazer scripts usar aliases em vez de comandos?

8

Eu tenho um alias para um comando (estou configurando um ambiente de desenvolvimento Python)

alias python=~/virtualenv/bin/python

para que eu possa executar ~/virtualenv/bin/python apenas digitando python . Agora no meu projeto existe um script de shell que vai, por exemplo:

#!/bin/sh
python run-project.py

Posso fazer o script usar meu alias python em vez do python que ele encontra em $PATH , sem fazer alterações no script?

    
por phunehehe 02.03.2011 / 02:57

3 respostas

7

Sim.

Se você colocar seus aliases em ~/.aliases , poderá fazer

export BASH_ENV="~/.aliases"
somescript

Isso pressupõe que seu script comece com #!/bin/bash , porque #!/bin/sh é um pouco menos previsível.

Veja o que eu sugiro:

  1. Crie ~ / .bashenv
  2. Mova todas as configurações que você deseja trabalhar em scripts de ~ / .bashrc para ~ / .bashenv
  3. Adicione isso na parte superior de seu ~ / .bashrc:% [ -f ~/.bashenv ] && source ~/.bashenv
  4. Coloque BASH_ENV=~/.bashenv em / etc / environment
  5. Faça seus scripts começarem com #!/bin/bash , se ainda não tiverem

Ou, se você estiver usando o zsh, basta mover seus aliases para ~ / .zshenv. zsh procura naquele arquivo automaticamente.

Mas talvez seja mais fácil colocar apenas ~/virtualenv/bin na frente do seu PATH e, em seguida, alterar seus scripts do Python para ter #!/usr/bin/env python como a primeira linha.

    
por 02.03.2011 / 03:08
4

Suponha que seu arquivo de alias é " ~ / .bash_aliases ", coloque isso em seu script:

#!/bin/bash
shopt -s expand_aliases
source ~/.bash_aliases
python run-project.py

( via )

    
por 02.03.2011 / 08:07
0

Como alternativa, você sempre pode source do seu script usar forçosamente os aliases. Por exemplo, suponhamos que você tenha um alias de rm em seu ~/.bashrc :

alias rm='moveToTrash'

enquanto moveToTrash é um programa no seu /usr/bin . Agora você tem um script chamado test.bash assim:

#!/bin/bash

which rm

Quando test.bash é executado diretamente, você pode ver a saída /bin/rm , enquanto source test.bash obterá a saída

alias rm='moveToTrash'
    /usr/bin/moveToTrash
    
por 14.01.2015 / 01:41