Puis-je faire en sorte que les scripts utilisent des alias au lieu des commandes?

8

J'ai un alias pour une commande (je configure un environnement de développement Python)

alias python=~/virtualenv/bin/python

afin que je puisse exécuter ~/virtualenv/bin/pythonen tapant simplement python. Maintenant, dans mon projet, il y a un script shell qui va, par exemple:

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

Puis-je faire en sorte que le script utilise mon alias pythonau lieu de celui pythonqu'il trouve dans $PATH, sans apporter de modifications au script?

phunehehe
la source
4
Par intérêt, pourquoi ne pouvez-vous pas changer de CHEMIN? Changer PATH et mettre #!/usr/bin/env pythonen haut de vos scripts python semble plus facile.
Mikel
@Mikel C'est encore mieux que votre autre réponse. Je ne peux cependant pas accepter les commentaires.
phunehehe
J'ai mis à jour ma réponse pour inclure cette suggestion.
Mikel

Réponses:

7

Oui.

Si vous mettez vos alias ~/.aliases, vous pouvez le faire

export BASH_ENV="~/.aliases"
somescript

Cela suppose que votre script commence par #!/bin/bash, car il #!/bin/shest un peu moins prévisible.

Voici ce que je suggérerais:

  1. Créer ~ / .bashenv
  2. Déplacez tous les paramètres que vous souhaitez utiliser dans les scripts de ~ / .bashrc vers ~ / .bashenv
  3. Ajoutez ceci en haut de votre ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Mettez BASH_ENV=~/.bashenvdans / etc / environment
  5. Faites commencer vos scripts #!/bin/bashs'ils ne le font pas déjà

Ou, si vous utilisez zsh, déplacez simplement vos alias dans ~ / .zshenv. zsh regarde automatiquement dans ce fichier.


Mais il est peut-être plus facile de simplement le placer à ~/virtualenv/binl'avant de votre PATH, puis de modifier vos scripts Python pour qu'ils aient #!/usr/bin/env pythonla première ligne.

Mikel
la source
Tu ne veux pas dire ~/.bashenvà l'étape 4?
cjm
Je vais donc devoir changer le script de toute façon, de #!/bin/shà #!/bin/bash? Puis-je faire juste bash my-script?
phunehehe
phunehehe: Oui, je pense que bash my-scriptcela fonctionnera si vous continuez à faire les étapes 1 à 4.
Mikel
Je ne recommande pas d'utiliser des alias dans les scripts. Cela ne fonctionnera pas si quelqu'un d'autre exécute votre script, ou si vous exécutez le script sous sudoou une autre méthode d'élévation de privilèges. Et cela ne vous permet pas de changer la virtualenvpar exécution, ce qui serait le principal point de ne pas l'avoir ~/virtualenv/binen PATHpermanence. L'ajout du répertoire devant le en PATHcas de besoin est la meilleure méthode.
Gilles 'SO- arrête d'être méchant'
4

Supposons que votre fichier d'alias soit " ~ / .bash_aliases ", mettez ceci dans votre script:

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

( via )

tshepang
la source
0

Alternativement, vous pouvez toujours sourceutiliser votre script pour forcer l'utilisation des alias. Par exemple, supposons que vous ayez un alias rmdans ~/.bashrc:

alias rm='moveToTrash'

while moveToTrashest un programme dans votre /usr/bin. Vous avez maintenant un script nommé test.bashcomme ceci:

#!/bin/bash

which rm

Quand test.bashest exécuté directement, vous pouvez voir la sortie /bin/rm, tandis que source test.bashvous obtiendrez la sortie

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Mark Z.
la source