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 correr ~/virtualenv/bin/pythonapenas digitando python. Agora, no meu projeto, há um script de shell que diz, por exemplo:

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

Posso fazer com que o script use meu alias em pythonvez do que pythonele encontra $PATH, sem fazer alterações no script?

phunehehe
fonte
4
Fora de interesse, por que você não pode mudar o PATH? Mudar PATH e colocar #!/usr/bin/env pythonno topo de seus scripts python parece mais fácil.
Mikel
@ Mikel Isso é ainda melhor do que sua outra resposta. Não posso aceitar comentários, no entanto.
phunehehe
Atualizei minha resposta para incluir essa sugestão.
Mikel

Respostas:

7

Sim.

Se você colocar seus aliases ~/.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.

Aqui está o que eu sugeriria:

  1. Crie ~ / .bashenv
  2. Mova todas as configurações que deseja trabalhar nos scripts de ~ / .bashrc para ~ / .bashenv
  3. Adicione isso na parte superior do seu ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Coloque BASH_ENV=~/.bashenvem / etc / environment
  5. Comece seus scripts #!/bin/bashse eles ainda não o fizerem

Ou, se você estiver usando zsh, apenas mova seus aliases para ~ / .zshenv. O zsh procura nesse arquivo automaticamente.


Mas talvez seja mais fácil colocar apenas ~/virtualenv/binna frente do seu PATHe alterar seus scripts Python para ter #!/usr/bin/env pythona primeira linha.

Mikel
fonte
Você não quis dizer ~/.bashenvna etapa 4?
CJM
Então, eu vou ter que mudar o script de qualquer maneira, de #!/bin/shpara #!/bin/bash? Posso apenas fazer bash my-script?
phunehehe
phunehehe: Sim, acho bash my-scriptque funcionará se você ainda executar as etapas 1 a 4.
Mikel
Eu não recomendo o uso de aliases em scripts. Não funcionará se alguém executar seu script ou se você executar o script sob sudooutro método de elevação de privilégios. E ele não permite que você altere a virtualenvexecução por, o que seria o principal ponto de não ter ~/virtualenv/binem sua PATHforma permanente. Adicionar o diretório na frente do PATHquando necessário é o melhor método.
Gilles 'SO- stop be evil'
4

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

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

( via )

tshepang
fonte
0

Como alternativa, você sempre pode sourceusar seu script para usar forçosamente os aliases. Por exemplo, vamos supor que você tenha um alias rmno seu ~/.bashrc:

alias rm='moveToTrash'

Enquanto moveToTrashé um programa no seu /usr/bin. Agora você tem um script chamado test.bashassim:

#!/bin/bash

which rm

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

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Mark Z.
fonte