Impostazione di alias bash temporanei durante l'immissione di una cartella


13

A volte mi piace avere alias bash molto personalizzati e forse combinazioni di tasti quando entro in una cartella (può essere un progetto in cui sono abituato a digitare molti comandi dalla CLI).

Supponiamo che quando entro in una cartella come "projectAlpha /" mi aspetto alcuni alias personalizzati come:

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

Più di quanto stavo pensando:

  • Visualizza un messaggio utile che mostra alias e comandi comuni
  • Visualizzazione di alcune combinazioni di tasti personalizzate comuni per il mio progetto

Ma non appena lascio la radice del mio progetto queste impostazioni non sono più disponibili.

Qual è l'approccio migliore per farlo oggi?


è venuto qui un pensiero ora per usare un alias per "cd" in ~ / .bashrc, un alias per entrare in una directory e inizia un nuovo bash che legge il .bashrc nascosto in quella directory ...
gzinho,

Risposte:


14

Bash ha una variabile speciale il PROMPT_COMMANDcui contenuto viene eseguito ogni volta dopo l'esecuzione del comando, quindi è possibile impostarlo come segue:

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

D'ora in poi ogni volta che sarai nella /tmpdirectory llverrà creato l' alias e in tutte le altre directory verrà rimosso.


Probabilmente più pratico è raccogliere tutti i tuoi alias e altre cose in una funzione (diciamo makealias) e tutti gli unalias nell'altra funzione makeunaliasche puoi eseguire in base alle tue esigenze, qualcosa come

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

Si noti che il reindirizzamento stderr è presente solo per evitare alcuni avvisi inutili in questo caso.


ty, ci proverò. +1 (se potessi
alzarmi

1
@ user3697611 Non hai bisogno di alcuna reputazione per accettare la risposta alla tua domanda. Fai clic sul segno di spunta accanto alla risposta.
Barmar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.