Sto cercando di ottenere shell-command
e async-shell-command
di integrarmi perfettamente con un paio di programmi nel mio .bashrc
file, 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 ~/.bashrc
file con:
... eval "$ (direnv hook $ 0)" eco "pippo"
All'interno ~/code/foo
ho un .envrc
file con:
export PATH = $ PWD / bin: $ PATH echo "bar"
Se corro M-x shell
con default-directory
set 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/foo
e 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-command
o start-process
far 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 .envrc
file.
.envrc
viene 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.