ฉันพยายามที่จะรับshell-commandและasync-shell-commandบูรณาการอย่างราบรื่นกับสองสามโปรแกรมใน.bashrcไฟล์ของฉันโดยเฉพาะdirenvในตัวอย่างนี้
ฉันพบว่าถ้าฉันปรับแต่งshell-command-switchฉันจะได้รับกระบวนการเปลือกโหลดโปรไฟล์ของฉันราวกับว่ามันเป็นเปลือกเข้าสู่ระบบแบบโต้ตอบปกติ:
(setq shell-command-switch (purecopy "-ic"))
(setq ชัดแจ้ง -bash-args '("-ic" "ส่งออก EMACS =; stty echo; bash"))
นอกจากนี้ผมยังใช้exec เส้นทางจากเปลือก
ว่าฉันมี~/.bashrcไฟล์ด้วย:
... eval "$ (direnv hook $ 0)" echo "foo"
ข้างใน~/code/fooฉันมี.envrcไฟล์ด้วย:
ส่งออก PATH = $ PWD / bin: $ PATH echo "bar"
ถ้าฉันรันM-x shellด้วยdefault-directoryset to ~/code/foo, bash shell จะโหลดโปรไฟล์ของฉันอย่างถูกต้องและรัน direnv hook เพื่อเพิ่มเข้าไปในเส้นทางของฉัน:
direnv: กำลังโหลด. envrc บาร์ direnv: ส่งออก ~ เส้นทาง ~ / code / foo $ echo $ PATH / ผู้ใช้ / ชื่อผู้ใช้ / รหัส / foo / bin: / usr / local / bin: ... # ส่วนที่เหลือของ $ PATH
อย่างไรก็ตามถ้าdefault-directoryยังคงอยู่~/code/fooและฉันรันM-! echo $PATHมันโหลด. bashrc ของฉันอย่างถูกต้อง แต่ไม่เรียกใช้ direnv hook ของไดเรกทอรีปัจจุบัน:
foo / usr / local / bin: ... # เหลือ $ PATH โดยไม่ต้อง. / bin
M-! cd ~/code/foo && echo $PATHฉันจะได้รับผลเหมือนกันถ้าผมทำงาน
มีวิธีที่ฉันสามารถแนะนำหรือขอเข้าไปshell-commandหรือstart-processทำให้มันทำงานราวกับว่ามันถูกส่งมาจากบัฟเฟอร์เปลือกโต้ตอบ?
eval "$(direnv hook $0)"คือ นี่คือการดำเนินการ แต่กลไกที่ควรได้รับเมื่อคุณอยู่ในไดเรกทอรีเฉพาะกับ.envrcไฟล์ไม่ได้
.envrcประเมินอะไรในไฟล์หรือไม่ หรือมันเป็นเพียงตัวแปรสภาพแวดล้อมที่ไม่ได้ถูกส่งออก? คุณช่วยยกตัวอย่างให้เต็มเพื่อที่ฉันจะได้ลองทำสิ่งนี้ซ้ำได้ไหม?
(setq shell-command-switch "-ic")แล้วควรประเมินพร้อมกับคำสั่งอื่น ๆ ใน ~ / .bashrc