Frage

Ich habe eine integrierte Funktion für Bash geschrieben, die den Befehl „cd“ ändert, eine Voraussetzung für meine Software.Gibt es eine Möglichkeit, ein Loadable tatsächlich unabhängig von Bash selbst zu verteilen?Idealerweise würde ich gerne nur einen Teil der „zusätzlichen Funktion“ verteilen, weil ich weiß, dass es Leute abschrecken kann, ihre Shell aus dem Quellcode zu patchen und zu kompilieren.

Ich möchte die Verweildauer eines Benutzers in einem Verzeichnis messen, damit ich bestimmen kann, wo er sein möchte.Es ist diese Funktionalität: http://github.com/joelthelion/autojump/tree/master Aus Leistungsgründen als Bash-Built-In umgeschrieben.Diese Implementierung verwendet $PROMPT_COMMAND um zu funktionieren, aber ich wollte etwas Integriertes.

War es hilfreich?

Lösung

Es ist unklar, was Sie geändert haben, aber auf jeden Fall bash (wie zumindest ksh93 welches IIRC das Konzept vorstellte und zsh) unterstützt, mit der enable -f file name Syntax, Laden integrierter Funktionen als externe dynamisch geladene Module.

Da es sich bei diesen Modulen um einfache Dateien handelt, können sie sicherlich unabhängig voneinander verteilt werden, solange Sie sicherstellen, dass sie mit der Zielversion/Architektur kompatibel sind.Das galt bereits vor 5 Jahren, als Sie diese Frage stellten.

Ein Problem in Ihrem Fall besteht darin, dass es offenbar keine dokumentierte Möglichkeit gibt, ein intern integriertes Like zu überlasten cd durch ein dynamisch geladenes, während die Möglichkeit des Zugriffs auf ersteres erhalten bleibt.

Eine einfache Problemumgehung wäre, Ihre benutzerdefinierte CD mit einem anderen Namen, beispielsweise mycd, wie folgt zu implementieren:

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

Verwenden Sie dann einen Alias ​​oder besser eine Shell-Funktion für Ihre angepasste Version, die anstelle der regulären Version verwendet werden soll:

cd() {
  mycd "$@"
}

Solange Ihre Anpassung das Verhalten des Standardbefehls nicht beeinträchtigt und somit nicht das Risiko besteht, dass Skripte, die ihn verwenden, beschädigt werden, ist an Ihrem Ansatz nichts auszusetzen.

Andere Tipps

die eingebaute CD zu ändern, ist eine Unterstützung Alptraum für jeden Admin und unwillkommen ausländische Nutzer. Was ist falsch mit ihm ‚Smart-cd‘ benennen und lassen den Benutzer entscheiden, ob sie, indem sie in ihrer Bashrc die Funktionalität wollen oder .profile? Dann können sie Setup Dinge aber sie wollen.

Auch mit, wie lange Sie in einem Verzeichnis sind eine ziemlich schlechte Anzeige der Präferenz. Wie würden Sie unterscheiden zwischen Leerlauf (eine vergessene Schale hängt in / tmp über Nacht), lang laufende Skripte (nächtlichen Cron-Jobs) und tatsächliche Tätigkeit.

Es gibt eine Vielzahl anderer Methoden für Verknüpfungen zu Favoriten Verzeichnisse zu erstellen: Aliasnamen, Softlinks, $ VARIABLEN, Skripte. Es ist arrogant von Ihnen anzunehmen, dass Ihre Nutzungsmuster werden von anderen Benutzern Ihres Systems begrüßt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top