Sto cercando di ottenere shell-commande async-shell-commanddi integrarmi perfettamente con un paio di programmi nel mio .bashrcfile, in particolare direnv in questo esempio.
Ho scoperto che se avessi personalizzato shell-command-switch, avrei potuto ottenere processi shell per caricare il mio profilo come se fosse una normale shell di login interattivo:
(setq shell-command-switch (purecopy "-ic"))
(setq esplicito-bash-args '("-ic" "export EMACS =; stty echo; bash"))
Sto anche usando exec-path-from-shell .
Di 'che ho un ~/.bashrcfile con:
... eval "$ (direnv hook $ 0)" eco "pippo"
All'interno ~/code/fooho un .envrcfile con:
export PATH = $ PWD / bin: $ PATH echo "bar"
Se corro M-x shellcon default-directoryset to ~/code/foo, una shell bash caricherà correttamente il mio profilo ed eseguirà il hook direnv per aggiungerlo al mio percorso:
direnv: caricamento .envrc bar direnv: export ~ PATH ~ / code / foo $ echo $ PERCORSO / Utenti / nome utente / codice / foo / bin: / usr / local / bin: ... # resto di $ PATH
Tuttavia, se default-directoryè ancora ~/code/fooe corro M-! echo $PATH, carica correttamente il mio .bashrc ma non esegue l'hook direnv della directory corrente:
foo / usr / local / bin: ... # resto di $ PATH senza ./bin
Ottengo lo stesso risultato se corro M-! cd ~/code/foo && echo $PATH.
C'è un modo in cui posso consigliare, agganciare shell-commando start-processfar sì che si comporti come se fosse inviato da un buffer di shell interattivo?
eval "$(direnv hook $0)". Questo viene eseguito, ma non lo è il meccanismo che dovrebbe essere attivato quando ci si trova in una directory specifica con un .envrcfile.
.envrcviene valutato nulla nel file? O sono solo le variabili d'ambiente che non vengono esportate? Potresti fornire un esempio completo in modo che io possa provare a riprodurlo?
(setq shell-command-switch "-ic"), dovrebbe essere valutato insieme ad ogni altro comando in ~ / .bashrc.