Festlegen von temporären Bash-Aliasen beim Aufrufen eines Ordners

13

Manchmal habe ich gerne sehr angepasste Bash-Aliase und möglicherweise Tastenkombinationen, wenn ich einen Ordner eingebe (kann ein Projekt sein, in dem ich viele Befehle von CLI eingebe).

Nehmen wir an, wenn ich einen Ordner wie "projectAlpha /" eingebe, erwarte ich einige benutzerdefinierte Aliase wie:

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

Mehr als ich dachte an:

  • Zeigt eine hilfreiche Meldung mit Aliasnamen und allgemeinen Befehlen an
  • Anzeigen einiger allgemeiner benutzerdefinierter Tastenkombinationen für mein Projekt

Sobald ich jedoch das Stammverzeichnis meines Projekts verlasse, sind diese Einstellungen nicht mehr verfügbar.

Was ist heute der beste Ansatz dafür?

gzinho
quelle
Es kam mir jetzt der Gedanke, einen Alias ​​für "cd" in ~ / .bashrc zu verwenden, einen Alias, der in ein Verzeichnis eingegeben wird, und einen neuen Bash zu starten, der die versteckte .bashrc in diesem Verzeichnis liest ...
gzinho
Fast doppelt: Führen Sie Bash-Skripte aus,
wenn Sie

Antworten:

14

Bash hat eine spezielle Variable, PROMPT_COMMANDderen Inhalt jedes Mal ausgeführt wird, nachdem der Befehl ausgeführt wurde. Sie können ihn also wie folgt einstellen:

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

Von nun an wird jedes Mal, wenn Sie sich im /tmpVerzeichnis befinden, ein Alias llerstellt und in allen anderen Verzeichnissen entfernt.


Wahrscheinlich ist es praktischer, alle Aliase und andere makealiasDinge in einer Funktion (etwa ) und alle Unaliase in der anderen Funktion zu sammeln, makeunaliasdie Sie je nach Ihren Anforderungen ausführen können, wie z

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

Beachten Sie, dass die stderr-Umleitung nur vorhanden ist, um in diesem Fall nutzlose Warnungen zu vermeiden.

jimmij
quelle
ty, ich werde es versuchen. +1 (wenn ich aufstehen könnte)
gzinho
1
@ user3697611 Sie benötigen keinen Ruf, um die Antwort auf Ihre Frage zu akzeptieren. Klicken Sie auf das Häkchen neben der Antwort.
Barmar