Définition d'alias bash temporaires lors de la saisie d'un dossier

13

Parfois, j'aime avoir des alias bash très personnalisés et peut-être des raccourcis clavier lorsque j'entre dans un dossier (peut être un projet où j'ai l'habitude de taper beaucoup de commandes depuis CLI).

Supposons que lorsque j'entre dans un dossier comme "projectAlpha /", j'attends des alias personnalisés comme:

  • alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
  • ...

Plus que ce à quoi je pensais:

  • Afficher un message utile montrant les alias et les commandes courantes
  • Affichage de quelques raccourcis clavier courants pour mon projet

Mais dès que je quitte la racine de mon projet, ces paramètres deviennent indisponibles.

Quelle est la meilleure approche pour le faire aujourd'hui?

gzinho
la source
est venu une idée ici maintenant d'utiliser un alias pour "cd" dans ~ / .bashrc, un alias pour entrer dans un répertoire et démarre une nouvelle bash qui lit le .bashrc caché dans ce répertoire ...
gzinho
Presque en double: exécuter des scripts bash en entrant dans un répertoire
Gilles 'SO- arrête d'être méchant'

Réponses:

14

Bash a une variable spéciale PROMPT_COMMANDdont le contenu est exécuté à chaque fois après l'exécution de la commande, vous pouvez donc le définir comme suit:

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'

Désormais, chaque fois que vous serez dans le /tmprépertoire, un alias llsera créé et dans tous les autres répertoires, il sera supprimé.


Il est probablement plus pratique de rassembler tous vos alias et autres éléments dans une fonction (par exemple makealias) et tous les alias dans l'autre fonction makeunaliasque vous pouvez exécuter en fonction de vos besoins, quelque chose comme

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'

Notez que la redirection stderr est présente uniquement pour éviter certaines alertes inutiles dans ce cas.

jimmij
la source
ty, je vais l'essayer. +1 (si je pouvais monter)
gzinho
1
@ user3697611 Vous n'avez besoin d'aucune réputation pour accepter la réponse à votre propre question. Cliquez sur la coche à côté de la réponse.
Barmar