শেল স্ক্রিপ্টের মধ্যে কীভাবে PATH পরিবর্তন করবেন?


28

আমার বেশ কয়েকটি প্রকল্প রয়েছে যার জন্য জাভা / গ্রেিলস / মাভেনের সংস্করণগুলি পরিবর্তন করা দরকার। আমি এটি এমন কিছু স্ক্রিপ্টগুলির সাহায্যে হ্যান্ডেল করার চেষ্টা করছি যা পরিবর্তিত হতে পারে। উদাহরণ স্বরূপ:

#!/bin/sh

export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$JAVA_HOME/bin:$PATH
export GRAILS_HOME=/cygdrive/c/dev/grails-1.0.3
export PATH=$GRAILS_HOME/bin:$PATH
export MAVEN_HOME=/cygdrive/c/dev/apache-maven-2.0.11
export PATH=$MAVEN_HOME/bin:$PATH
which java
which grails
which mvn

যখন এটি সম্পাদন করে, এটি স্ক্রিপ্টের প্রেক্ষাপটে PATH সাফল্যের সাথে পরিবর্তন করে তবে স্ক্রিপ্টটি শেষ হয় এবং কোনও পরিবর্তন সম্পাদিত হয় নি।

আমি বর্তমানে যে শেলটিতে কাজ করছি তার জন্য PATH পরিবর্তন করার উপায়ে আমি কীভাবে কোনও স্ক্রিপ্ট চালাতে পারি?

আমি সাইগউইন ব্যবহার করছি।

উত্তর:


39

আপনাকে নতুন শেলটি ব্যবহার করতে হবে sourceবা করতে হবে eval

আপনি যখন শেল স্ক্রিপ্টটি চালান তখন একটি নতুন শিশু শেল তৈরি হয়। এই শিশু শেলটি স্ক্রিপ্ট কমান্ডগুলি কার্যকর করবে। পিতা শেল পরিবেশ অক্ষত থাকবে কিছু ঘটবে দ্বারা সন্তান শেল।

এই পরিস্থিতিটি পরিচালনা করার জন্য বিভিন্ন কৌশল রয়েছে:

  1. বর্তমান শেল থেকে কমান্ডের তালিকা তৈরি করে একটি ফাইল উত্সফায়াল প্রস্তুত করুন source:

    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH

    এবং তারপর এটি উত্স

    source sourcefile

    নোট করুন যে উত্সফিল শুরু হওয়ার পরে - ব্যাংয়ের দরকার নেই তবে এটি এটির সাথে কাজ করবে।

  2. একটি স্ক্রিপ্ট evalfile.sh প্রস্তুত করুন যা পরিবেশ নির্ধারণের জন্য কমান্ডটি মুদ্রণ করে:

    #!/bin/sh
    echo "export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
    echo "export PATH=$JAVA_HOME/bin:$PATH"

    এবং তারপরে evalএটি উত্সাহিত করুন:

    eval `evalfile.sh`
  3. একটি নতুন শেল কনফিগার করুন এবং চালনা করুন:

    #!/bin/sh
    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH
    
    exec /bin/bash

    মনে রাখবেন যে যখন আপনি টাইপ exitএই শেল, আপনি ফিরে আসতে হবে পিতা এক।

  4. আপনার একটি নাম রাখুন ~/.bashrc:

    alias prepare_environ='export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$JAVA_HOME/bin:$PATH;'

    এবং যখন প্রয়োজন হবে তখন এটি কল করুন:

    prepare_environ

1
আমি লক্ষ্য করেছি যে sourceশুধুমাত্র জন্য কাজ করে bash। জন্য আউটপুট ksh: /bin/ksh: source: not foundজন্য sh: sh: 0: source: not found। এই শেলগুলির জন্য নীচের উত্তরটি বিবেচনা করা উচিত।
ড্যানি লো

@ উদ্যানল্লো, আপনি ঠিক বলেছেন তবে প্রশ্নটি পরিষ্কারভাবে bashকেন্দ্রিক।
andcoz

Export PATH- র সাথে 'রফতানি' আবশ্যক - যা সম্ভবত ইতিমধ্যে বিদ্যমান?
esskov

@ ইসকভ সাধারণত এটি হয় না। আমি এআইএক্স-এ কেবলমাত্র শ এর একটি পুরানো সংস্করণ মনে করি যা এটির প্রয়োজন ছিল (প্রায় 1992) তবে সম্ভবত এটি কোনও প্রকার বাগ ছিল।
andcoz

19

উত্স বিল্টইন ব্যবহার করে আপনি এটি করতে পারেন :

. script_name

কিছু শাঁস একটি নামের নাম উত্স সরবরাহ করে :

source script_name

-1

চকোলেটি @ ইউনিক্স ইনস্টল করেছেন, আপনার বর্তমান সেশনে আপডেট পরিবেশের পরিবর্তনগুলি পেতে আপনি কেবল রিফ্রেশইএনভি চালাতে পারেন

বিস্তারিত


1
আপনি যে প্রশ্নটি খুব যুক্ত করেছেন (এবং এর উত্তরগুলি) তা উইন্ডোজ সম্পর্কে।   এই প্রশ্নটি ইউনিক্স এবং লিনাক্স সম্পর্কে, সুতরাং আপনার পোস্ট এই প্রশ্নের উত্তর দেয় না ।
জি-ম্যান বলছেন 'মনিকা পুনরায় ইনস্টল করুন'


ঠিক আছে, আপনি দাবি করেছেন যে এই উত্তরটি ইউনিক্সের জন্য কাজ করে। আপনার বিশদ লিঙ্কটি এখনও অপ্রাসঙ্গিক। এটি ইউনিক্সে কীভাবে কাজ করে তার জন্য বিশদ সরবরাহ করুন। অনুমোদিত ডকুমেন্টগুলির লিঙ্কগুলি ভাল হবে, তবে কেবল লিঙ্কগুলি পোস্ট করবেন না; আপনার উত্তর প্রাসঙ্গিক তথ্য রাখুন। … অনুগ্রহ করে মন্তব্যে সাড়া দিবেন না; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন।
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.