ডিরেক্টরিতে প্রবেশের সময় বাশ স্ক্রিপ্টগুলি সম্পাদন করুন


40

ডিরেক্টরিতে প্রবেশের সময় কোনও স্ক্রিপ্ট কার্যকর করার সর্বোত্তম উপায় কী?
যখন আমি একটি নতুন ডিরেক্টরিতে স্থানান্তরিত করি তখন আমি আরভিএমের মতো প্রজেক্টসেটিংস.বাশ স্ক্রিপ্টটি কার্যকর করতে বাশ চাই।


2
প্রতিটি ডিরেক্টরিতে, বা নির্বাচিত? এবং প্রতিটি জন্য একই স্ক্রিপ্ট, না?
enzotib

প্রতিটি ডিরেক্টরি। ডিরেক্টরিতে স্ক্রিপ্টটির নাম প্রজেক্টসেটিংস.বাশ উপস্থিত থাকলে তা বিদ্যমান।
MageProspero

উত্তর:


46

আপনি cdএকটি ফাংশন (এবং popএবং pushd) তৈরি করতে পারেন এবং আপনি যদি সেই নির্দিষ্ট ডিরেক্টরিটি প্রবেশ করেন তবে এটি সনাক্ত করতে পারেন।

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
unset_all_project_settings () {
  # do whatever it takes to undo the effect of projectSettings.bash,
  # e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
  case $PWD in
    /some/directory|/some/other/directory) . ./projectSettings.bash;;
    *) unset_all_project_settings;;
  esac
}

যে ডিরেক্টরিগুলিকে আপনি শ্বেত তালিকাভুক্ত করেননি সেগুলিতে এটি করবেন না কারণ কারও পক্ষে আপনাকে স্বেচ্ছাসেবক কোড চালানোর পক্ষে কৌশল করা খুব সহজ হয়ে যায় - আপনাকে একটি সংরক্ষণাগার প্রেরণ করা হয়, সুতরাং আপনি এটি আনজিপ করুন, এটি তৈরি করা ডিরেক্টরিতে পরিবর্তন করুন এবং আপনি ' এখন আক্রমণকারীর কোড চালাও।

আমি এই পদ্ধতির প্রস্তাব দিচ্ছি না, কারণ এর অর্থ হ'ল স্ক্রিপ্টটি কার্যকর করা হবে এমনকি যদি আপনি কোনও কারণে প্রকল্পটিতে কাজ সম্পর্কিত নয় এমন কারণে ডিরেক্টরিটি প্রবেশ করেন তবে। আমি একটি নির্দিষ্ট ফাংশন রাখার পরামর্শ দিচ্ছি যা প্রকল্প ডিরেক্টরিতে পরিবর্তিত হয় এবং সেটিংস স্ক্রিপ্ট উত্স করে।

myproj () {
  cd /some/directory && . ./projectSettings.bash
}

1
আমি কিছুক্ষণ আগে রুবিতে শুরু করেছি। আরভিএম সরঞ্জামটি সম্পূর্ণভাবে ব্যাশে রয়েছে এবং আমি দেখেছি ব্যাশ যাদুবিদ্যার অন্যতম সেরা টুকরো। আমি মনে করি উত্তরটি কিছুটা নির্বোধ, কারণ আপনি যা করতে পারেন তার মধ্যে সবচেয়ে খারাপ জিনিসগুলির মধ্যে একটি হ'ল কিছু চালিয়ে cdযাওয়া এবং সন্দেহের আরও ভাল উপায় রয়েছে। এমনকি $ PROMPT_COMMAND ব্যবহার করা আরও ভাল!
ম্যাগপ্রোস্পিরো

3
আমি পুরোপুরি ভুল ছিলাম এবং ক্ষমা চেয়েছিলাম। আরভিএম সিডি ওভারলোডিং করছিল।
MageProspero

5
(এই মন্তব্য থ্রেড থেকে কিছু স্পর্শকাতর প্রো / অ্যান্টি-রুবি স্টাফ সরানো হয়েছে)
মাইকেল মরোজেক

1
প্রজেক্টসেটেটিং.বাশ-এ আমি পরামর্শ দিচ্ছি যে আপনি ডিরেক্টরি থেকে প্রস্থান / পুনরায় প্রবেশের ক্ষেত্রে আরম্ভের পুনরাবৃত্তি না করার জন্য একটি পতাকা পরিবর্তনশীল যুক্ত করার পরামর্শ দিন। সুতরাং সবকিছু বন্ধ করুন if [ -z $MYSETTINGS ] ; then export MYSETTINGS=1 ; echo your settings here ; fi। আপনি PATH = / মাইটোলস / বিন: কিছু করার ক্ষেত্রে সমস্যা এড়ানোর জন্য এটি হ'ল: AT পথ এক ধরণের সূচনা।
মাকড়সা

5
@ স্পাইডার পরিবর্তে ডিরেক্টরিটি ছেড়ে দিলে কিছু ধরণের আনসেট প্রক্রিয়া থাকা উচিত। যদি আপনি চলে যান এবং পুনরায় প্রবেশ করেন, আপনার সেটিংসটি ফিরে পাওয়া উচিত!
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

0

ডিরেক্টরি আপনি যা খুঁজছেন তা হতে পারে।

অফিসিয়াল ডকুমেন্টেশন থেকে নেওয়া এখানে একটি উদাহরণ:

$ cd ~/my_project
$ echo ${FOO-nope}
nope
$ echo export FOO=foo > .envrc
.envrc is not allowed
$ direnv allow .
direnv: reloading
direnv: loading .envrc
direnv export: +FOO
$ echo ${FOO-nope}
foo
$ cd ..
direnv: unloading
direnv export: ~PATH
$ echo ${FOO-nope}
nope
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.