Próbuję dostać shell-commandi async-shell-commanddo integracji z kilku programów w moim .bashrcpliku, specjalnie direnv w tym przykładzie.
Przekonałem się, że jeśli dostosuję shell-command-switch, mogę uzyskać procesy powłoki ładujące mój profil, tak jakby to była zwykła interaktywna powłoka logowania:
(setq shell-command-switch (purecopy „-ic”)) (setq express-bash-args '(„-ic” „export EMACS =; stty echo; bash”))
Używam również exec-path-from-shell .
Powiedz, że mam ~/.bashrcplik z:
... eval „$ (hak direnv 0 $)” echo „foo”
W środku ~/code/foomam .envrcplik z:
eksport PATH = $ PWD / bin: $ PATH „pasek” echa
Jeśli uruchomię M-x shellz default-directoryustawioną na ~/code/foo, powłoka bash poprawnie załaduje mój profil i uruchomi direnv hook, aby dodać go do mojej ścieżki:
direnv: ładowanie .envrc bar direnv: eksport ~ ŚCIEŻKA ~ / code / foo $ echo $ PATH / Users / nazwa użytkownika / kod / foo / bin: / usr / local / bin: ... # reszta $ PATH
Jednak jeśli default-directorynadal jest ~/code/foouruchomiony M-! echo $PATH, to poprawnie ładuje mój plik .bashrc, ale nie wykonuje haka direnv bieżącego katalogu:
bla / usr / local / bin: ... # reszta $ PATH bez ./bin
Otrzymuję ten sam wynik, jeśli biegnę M-! cd ~/code/foo && echo $PATH.
Czy istnieje sposób, w jaki mogę doradzić, podpiąć się shell-commandlub start-processsprawić, by zachowywał się tak, jakby był wysyłany z interaktywnego bufora powłoki?
eval "$(direnv hook $0)". Jest to wykonywane, ale nie działa mechanizm, który powinien zostać uruchomiony, gdy jesteś w określonym katalogu z .envrcplikiem.
.envrcpliku nie jest oceniane? Czy to tylko zmienne środowiskowe, które nie są eksportowane? Czy możesz podać pełny przykład, abym mógł spróbować to odtworzyć?
(setq shell-command-switch "-ic"), powinien zostać oceniony wraz z każdym innym poleceniem w ~ / .bashrc.