Estoy tratando de conseguir shell-commandy async-shell-commandpara integrarse perfectamente con un par de programas en mi .bashrcarchivo, específicamente direnv en este ejemplo.
Descubrí que si lo personalizaba shell-command-switch, podía obtener procesos de shell para cargar mi perfil como si fuera un shell de inicio de sesión interactivo normal:
(setq shell-command-switch (purecopy "-ic"))
(setq explicit-bash-args '("-ic" "export EMACS =; stty echo; bash"))
También estoy usando exec-path-from-shell .
Digamos que tengo un ~/.bashrcarchivo con:
... eval "$ (enlace directo $ 0)" echo "foo"
Dentro ~/code/footengo un .envrcarchivo con:
RUTA de exportación = $ PWD / bin: $ RUTA echo "bar"
Si ejecuto M-x shellcon default-directoryset to ~/code/foo, un shell bash cargará correctamente mi perfil y ejecutará el enlace directo para agregarlo a mi ruta:
direnv: cargando .envrc bar direnv: export ~ RUTA ~ / code / foo $ echo $ PATH / Usuarios / nombre de usuario / código / foo / bin: / usr / local / bin: ... # resto de $ PATH
Sin embargo, si default-directoryestá quieto ~/code/fooy ejecuto M-! echo $PATH, carga correctamente mi .bashrc pero no ejecuta el enlace direnv del directorio actual:
foo / usr / local / bin: ... # resto de $ PATH sin ./bin
Obtengo el mismo resultado si corro M-! cd ~/code/foo && echo $PATH.
¿Hay alguna manera de aconsejar o conectar shell-commando start-processhacer que se comporte como si se enviara desde un búfer de shell interactivo?
eval "$(direnv hook $0)". Esto se está ejecutando, pero el mecanismo que debería activarse cuando está en un directorio específico con un .envrcarchivo no lo está.
.envrcevalúa nada en el archivo? ¿O son solo las variables de entorno que no se exportan? ¿Podría darme un ejemplo completo para que pueda intentar reproducir esto?
(setq shell-command-switch "-ic")entonces debe evaluarse junto con cualquier otro comando en ~ / .bashrc.