Ich versuche , zu erhalten shell-commandund async-shell-commandmit ein paar Programme in meiner nahtlos zu integrieren .bashrcDatei, speziell direnv in diesem Beispiel.
Ich stellte fest, dass ich beim Anpassen shell-command-switchShell-Prozesse dazu bringen könnte, mein Profil so zu laden, als wäre es eine reguläre interaktive Login-Shell:
(setq shell-command-switch (purecopy "-ic"))
(setq explizit-bash-args '("-ic" "export EMACS =; stty echo; bash"))
Ich benutze auch exec-path-from-shell .
Angenommen, ich habe eine ~/.bashrcDatei mit:
... eval "$ (direnv hook $ 0)" Echo "foo"
Im Inneren habe ~/code/fooich eine .envrcDatei mit:
export PATH = $ PWD / bin: $ PATH Echo "Bar"
Wenn ich M-x shellmit default-directoryset to ~/code/fooausführe, lädt eine Bash-Shell mein Profil korrekt und führt den direnv-Hook aus, um dies meinem Pfad hinzuzufügen:
direnv: Laden von .envrc Bar direnv: export ~ PATH ~ / code / foo $ echo $ PATH / Benutzer / Benutzername / Code / foo / bin: / usr / local / bin: ... # Rest von $ PATH
Wenn dies default-directoryjedoch immer noch der Fall ist ~/code/foound ich ausgeführt werde M-! echo $PATH, wird meine .bashrc-Datei korrekt geladen, der direnv-Hook des aktuellen Verzeichnisses wird jedoch nicht ausgeführt:
foo / usr / local / bin: ... # Rest von $ PATH ohne ./bin
Ich bekomme das gleiche Ergebnis, wenn ich renne M-! cd ~/code/foo && echo $PATH.
Gibt es eine Weise , die ich beraten oder Haken in shell-commandoder start-processum es sich verhalten , als ob es aus einem interaktiven Shell - Puffer gesendet wurden?
eval "$(direnv hook $0)". Dies wird ausgeführt, aber der Mechanismus, der ausgelöst werden soll, wenn Sie sich in einem bestimmten Verzeichnis mit einer .envrcDatei befinden, ist dies nicht.
.envrcDatei ausgewertet? Oder werden nur Umgebungsvariablen nicht exportiert? Könnten Sie bitte ein vollständiges Beispiel angeben, damit ich versuchen kann, dies zu reproduzieren?
(setq shell-command-switch "-ic")es ausgewertet haben, sollte es zusammen mit jedem anderen Befehl in ~ / .bashrc ausgewertet werden.