Wie führe ich ein Shell-Kommando / Skript automatisch aus, wenn Sie ein Verzeichnis in Snow Leopard eingeben?

2878
Mark Scholtz

Entschuldigung, wenn die Antwort darauf offensichtlich ist, aber ich konnte noch keine finden (vielleicht, weil ich mit der falschen Terminologie suche).

Ich bin auf einem Mac, auf dem Snow Leopard läuft, und ich würde gerne wissen, ob es möglich ist, einen Shell-Befehl (oder ein Skript) automatisch auszuführen, wenn ich / cd in dieses Verzeichnis eingebe.

Ein Beispiel zur besseren Veranschaulichung meiner Frage: Ich verwende RVM zum Verwalten von Ruby-Versionen. Es verwendet eine ähnliche Taktik mit seinen Projekt- .rvmrc- Dateien. Diese Dateien werden ausgeführt, wenn das Verzeichnis, in dem sie enthalten sind, eingegeben wird, um die richtige Version von Ruby für dieses bestimmte Projekt zu verwenden.

Ich möchte etwas Ähnliches tun, um den Inhalt einer todo.txt-Datei anzuzeigen, wenn ich die Dateien mit dem Verzeichnis eingebe.

6
* Eingabe * wie in `cd`ing dort? Daniel Beck vor 13 Jahren 0
Ja "Eingabe" == "cd-ing" Mark Scholtz vor 13 Jahren 0

1 Antwort auf die Frage

7
Daniel Beck

Fügen Sie Folgendes zu Ihrem hinzu ~/.bash_profile:

function cd { # actually change the directory with all args passed to the function builtin cd "$@" # if there's a regular file named "todo.txt"... if [ -f "todo.txt" ] ; then # display its contents cat todo.txt fi } 

Möglicherweise haben Sie bereits eine ähnliche Funktion für cd- erweitern Sie diese einfach, um den Inhalt zu drucken, todo.txtfalls vorhanden.

Dies funktioniert nicht mit `popd` und` pushd`, wenn Sie diese verwenden. Ändern Sie sie entsprechend. Daniel Beck vor 13 Jahren 1
Vielen Dank für die Antwort! Ich habe versucht, die obige Methode zu meinem ~ / .bash_profile hinzuzufügen, aber es scheint, als würde die Builtin-CD-Methode immer noch aufgerufen werden, anstatt meiner benutzerdefinierten CD-Methode. Ich habe eine Testmethode in meinem ~ / .bash_profile erstellt, um zu bestätigen, dass dort hinzugefügte Methoden tatsächlich aufgerufen werden. Mark Scholtz vor 13 Jahren 0
@ Mark in diesem Fall, etwas anderes ändert Ihre "CD" wieder, wie ich in meiner Antwort angedeutet habe - ich habe erst gepostet, nachdem ich bestätigt hatte, dass es für mich funktioniert. Finden Sie Ihre aktuelle `cd`-Definition durch Eingabe von 'shopt -s extdebug; erkläre -F cd`. Außerdem müssen Sie eine neue Shell-Sitzung erstellen oder `.bash_profile` erneut manuell laden, damit die Änderungen wirksam werden. Daniel Beck vor 13 Jahren 0
@Daniel es scheint, dass RVM der Täter ist. Die Ausgabe dieses Befehls führte zu folgendem Ergebnis: "cd 43 /Users/mark/.rvm/scripts/cd". Wenn ich mir dieses Skript anschaue, kann ich feststellen, dass es etwas in der Richtung des Vorschlags tut, was Sie vorschlagen (es führt auch den Befehl "builtin cd"% @ "` aus). Wenn ich meine ~ / .rmvrc-Datei ändere, kann ich diese Funktionalität deaktivieren, wodurch meine benutzerdefinierte CD-Methode ausgeführt werden kann, aber ich verliere die benutzerdefinierte Funktionalität von RVM. Ich werde die RMV-Dokumentation lesen müssen, um herauszufinden, ob ich beide benutzerdefinierten CD-Funktionen irgendwie nutzen kann. Mark Scholtz vor 13 Jahren 1
@Mark Sie sollten in der Lage sein, den `if'-Teil meiner Funktionsdefinition zur` cd`-Funktion in dieser Datei hinzuzufügen, wie ich im letzten Satz meiner Antwort erwähnt habe. Hängt jedoch davon ab, wie sie ihre Funktionalität implementieren. Daniel Beck vor 12 Jahren 0
@Daniel Ich habe das Problem behoben, indem ich in meinem ~ / .rvm / hooks / -Verzeichnis eine Datei mit dem Namen "after_cd" erstellt habe, die von RVM selbst ausgeführt wird, wenn die `cd'-Funktion aufgerufen wird. Wenn jemand daran interessiert ist, wie RVM mit Verzeichnisänderungen umgeht, kann der Ersteller [hier] (http://stackoverflow.com/questions/5605277/how-does-rvm-detect-when-youve-changed-directories) eine großartige Antwort finden ) Mark Scholtz vor 12 Jahren 1