Was ist der beste Weg, um ein Skript auszuführen, wenn ich mich in ein Verzeichnis begebe?
Wenn ich in ein neues Verzeichnis gehe, möchte ich, dass bash das Skript projectSettings.bash ähnlich wie RVM ausführt.
Akzeptierte Antwort:
Sie können cd
erstellen eine Funktion (und pop
und pushd
) und lassen Sie es erkennen, wenn Sie dieses bestimmte Verzeichnis betreten.
cd () { builtin cd "[email protected]" && chpwd; }
pushd () { builtin pushd "[email protected]" && chpwd; }
popd () { builtin popd "[email protected]" && chpwd; }
unset_all_project_settings () {
# do whatever it takes to undo the effect of projectSettings.bash,
# e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
case $PWD in
/some/directory|/some/other/directory) . ./projectSettings.bash;;
*) unset_all_project_settings;;
esac
}
Tun Sie dies nicht in Verzeichnissen, die Sie nicht auf die Whitelist gesetzt haben, da es für jemanden sehr einfach wäre, Sie dazu zu bringen, beliebigen Code auszuführen – senden Sie Ihnen ein Archiv, damit Sie es entpacken, in das Verzeichnis wechseln, das es erstellt hat, und Sie Ich habe jetzt den Code des Angreifers ausgeführt.
Ich empfehle diesen Ansatz nicht, da das Skript ausgeführt wird, selbst wenn Sie dieses Verzeichnis aus irgendeinem Grund eingeben, der nichts mit der Arbeit am Projekt zu tun hat. Ich schlage vor, eine bestimmte Funktion zu haben, die in das Projektverzeichnis wechselt und das Einstellungsskript bezieht.
myproj () {
cd /some/directory && . ./projectSettings.bash
}