আমি পেতে চেষ্টা করছি shell-command
এবং async-shell-command
আমার মধ্যে প্রোগ্রাম একটি দম্পতি সাথে অঙ্গীভূতভাবে সংহত করার .bashrc
ফাইল, বিশেষভাবে direnv এই উদাহরণে হবে।
আমি দেখেছি যে আমি কাস্টমাইজ করা থাকলে shell-command-switch
, আমার প্রোফাইলটি লোড করার জন্য আমি শেল প্রক্রিয়াগুলি পেতে পারি যেন এটি একটি নিয়মিত ইন্টারেক্টিভ লগইন শেল:
(সেটেক শেল-কমান্ড-স্যুইচ (খাঁটি কপি "-ic")) (সেটেক স্পষ্ট-বাশ-আরগস '("-ic" "রফতানি EMACS =; স্টিটি ইকো; ব্যাশ"))
আমিও ব্যবহার করছি Exec-পথ-থেকে-শেল ।
বলুন আমার ~/.bashrc
সাথে একটি ফাইল রয়েছে:
... eval "$ (ডিরেক্টনভ হুক $ 0)" প্রতিধ্বনি "ফু"
ভিতরে ~/code/foo
আমার .envrc
সাথে একটি ফাইল রয়েছে:
PATH = $ PWD / bin: export PATH রফতানি করুন প্রতিধ্বনি "বার"
আমি চালানোর প্রয়োজন হলে M-x shell
সঙ্গে default-directory
সেটে ~/code/foo
, একটি ব্যাশ শেল সঠিকভাবে আমার প্রোফাইল লোড আমার পথ যে যোগ করার জন্য direnv হুক চালানো হবে:
ডিরেক্টরি: লোড করা .envrc বার ডিরেক্টনভ: এক্সপোর্ট ~ PATH AT ~ / কোড / foo $ প্রতিধ্বনি $ PATH / ব্যবহারকারী / ব্যবহারকারী নাম / কোড / ফু / বিন: / ইউএসআর / স্থানীয় / বিন: ... # বাকী AT প্যাথ
তবে যদি default-directory
এখনও থাকে ~/code/foo
এবং আমি M-! echo $PATH
চালিয়ে যাই তবে এটি সঠিকভাবে আমার .bashrc লোড করে তবে বর্তমান ডিরেক্টরিটির ডিরেক্টনভ হুকটি কার্যকর করে না:
foo বিন্যাস / usr / স্থানীয় / বিন: ... # বাকী। PATH ./bin ছাড়া
আমি চালালে আমি একই ফলাফল পেতে M-! cd ~/code/foo && echo $PATH
।
আমি কীভাবে কোনও পরামর্শ বা হুক করতে পারি shell-command
বা start-process
এটি এমন আচরণ করতে পারি যেন এটি কোনও ইন্টারেক্টিভ শেল বাফার থেকে প্রেরণ করা হয়েছিল?
eval "$(direnv hook $0)"
। / .Bashrc এর লাইনটি । এটি কার্যকর হচ্ছে, তবে আপনি যখন কোনও .envrc
ফাইলের সাথে একটি নির্দিষ্ট ডিরেক্টরিতে থাকবেন তখন যে পদ্ধতিটি বরখাস্ত করা উচিত তা নয়।
.envrc
ফাইল কিছুই মূল্যায়ন করা হয়? বা রফতানি করা হয় না শুধুমাত্র পরিবেশ পরিবর্তনশীল? আপনি কি দয়া করে একটি পূর্ণ উদাহরণ সরবরাহ করতে পারেন যাতে আমি এটি পুনরুত্পাদন করার চেষ্টা করতে পারি?
(setq shell-command-switch "-ic")
তবে ~ / .bashrc এ থাকা প্রতিটি কমান্ডের সাথে এটি মূল্যায়ন করা উচিত।