ฉันพยายามที่จะรับ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-directory
set 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