मैं अपनी फ़ाइल में कुछ कार्यक्रमों के साथ समेकित रूप से प्राप्त करने shell-command
और async-shell-command
एकीकृत करने की कोशिश कर रहा हूं .bashrc
, विशेष रूप से इस उदाहरण में direnv ।
मैंने पाया कि यदि मैं अनुकूलित करता हूं shell-command-switch
, तो मुझे अपनी प्रोफ़ाइल लोड करने के लिए शेल प्रक्रियाएं मिल सकती हैं जैसे कि यह एक नियमित इंटरेक्टिव लॉगिन शेल था:
(सेट शेल-कमांड-स्विच (प्योरकोपी "-ic")) (सेट-क्लीयर-बैश-आर्ग्स '("-ic" "निर्यात EMACS =; स्टिकी इच; बाइट" "))
मैं निष्पादन-पथ-से-शेल का भी उपयोग कर रहा हूं ।
कहो कि मेरे पास एक ~/.bashrc
फ़ाइल है:
... eval "$ (direnv हुक $ 0)" इको "फू"
अंदर ~/code/foo
मेरे पास एक .envrc
फाइल है:
निर्यात पथ = $ पीडब्ल्यूडी / बिन: $ पथ इको "बार"
अगर मैं सेट के M-x shell
साथ दौड़ता हूं , तो एक bash शेल मेरी प्रोफाइल को सही ढंग से लोड करेगा और उसे मेरे पथ में जोड़ने के लिए direnv हुक चलाएगा:default-directory
~/code/foo
direnv: loading .envrc बार direnv: निर्यात ~ पथ ~ / कोड / फू $ इको $ पाथ / उपयोगकर्ता / उपयोगकर्ता नाम / कोड / foo / bin: / usr / स्थानीय / बिन: ... # शेष $ पेट
हालांकि, अगर default-directory
अभी भी है ~/code/foo
और मैं चलाता हूं M-! echo $PATH
, तो यह मेरे .bashrc को सही ढंग से लोड करता है, लेकिन वर्तमान निर्देशिका के direnv हुक को निष्पादित नहीं करता है:
foo / usr / स्थानीय / बिन: ... # $ PATH के बिना बाकी ।/bin
अगर मैं दौड़ता हूं तो मुझे वही परिणाम मिलता है M-! cd ~/code/foo && echo $PATH
।
वहाँ एक रास्ता मैं सलाह देने के लिए या में हुक कर सकते हैं shell-command
या start-process
जैसे कि यह एक इंटरैक्टिव खोल बफर से भेजे जा रहे थे यह व्यवहार करते हैं बनाने के लिए?
eval "$(direnv hook $0)"
। यह निष्पादित हो रहा है, लेकिन जब आप एक विशिष्ट निर्देशिका में होते हैं तो एक .envrc
फाइल के साथ तंत्र को निकाल दिया जाना चाहिए ।
.envrc
फ़ाइल में कुछ भी मूल्यांकन नहीं किया गया है? या यह सिर्फ पर्यावरण चर है जो निर्यात नहीं किए जाते हैं? क्या आप कृपया एक पूर्ण उदाहरण प्रदान कर सकते हैं ताकि मैं इसे पुन: पेश करने का प्रयास कर सकूं?
(setq shell-command-switch "-ic")
तो इसका मूल्यांकन ~ / .bashrc में हर दूसरे कमांड के साथ किया जाना चाहिए।