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/python
en 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 python
au lieu de celui python
qu'il trouve dans $PATH
, sans apporter de modifications au script?
shell-script
alias
phunehehe
la source
la source
#!/usr/bin/env python
en haut de vos scripts python semble plus facile.Réponses:
Oui.
Si vous mettez vos alias
~/.aliases
, vous pouvez le faireCela suppose que votre script commence par
#!/bin/bash
, car il#!/bin/sh
est un peu moins prévisible.Voici ce que je suggérerais:
[ -f ~/.bashenv ] && source ~/.bashenv
BASH_ENV=~/.bashenv
dans / etc / environment#!/bin/bash
s'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/bin
l'avant de votrePATH
, puis de modifier vos scripts Python pour qu'ils aient#!/usr/bin/env python
la première ligne.la source
~/.bashenv
à l'étape 4?#!/bin/sh
à#!/bin/bash
? Puis-je faire justebash my-script
?bash my-script
cela fonctionnera si vous continuez à faire les étapes 1 à 4.sudo
ou une autre méthode d'élévation de privilèges. Et cela ne vous permet pas de changer lavirtualenv
par exécution, ce qui serait le principal point de ne pas l'avoir~/virtualenv/bin
enPATH
permanence. L'ajout du répertoire devant le enPATH
cas de besoin est la meilleure méthode.Supposons que votre fichier d'alias soit " ~ / .bash_aliases ", mettez ceci dans votre script:
( via )
la source
Alternativement, vous pouvez toujours
source
utiliser votre script pour forcer l'utilisation des alias. Par exemple, supposons que vous ayez un aliasrm
dans~/.bashrc
:while
moveToTrash
est un programme dans votre/usr/bin
. Vous avez maintenant un script nommétest.bash
comme ceci:Quand
test.bash
est exécuté directement, vous pouvez voir la sortie/bin/rm
, tandis quesource test.bash
vous obtiendrez la sortiela source