বাশ স্ক্রিপ্টে উত্স ব্যবহার করার সময় একটি 'উত্স: পাওয়া যায় নি' ত্রুটি পাওয়া


159

আমি একটি সহজ বাশ স্ক্রিপ্ট যা লিখতে চেষ্টা করেছি (যা আমি ভাবতাম):

  1. environment 1 এ নতুন পরিবেশ তৈরি করতে ভার্চুয়ালেনভ চালান
  2. ভার্চুয়াল পরিবেশ সক্রিয় করুন
  3. আরও কিছু স্টাফ করুন (জ্যাঞ্জো ইনস্টল করুন, ভ্যাচুয়ালেনভের পথে django-admin.py যুক্ত করুন)

পদক্ষেপ 1 বেশ ভাল কাজ করে, তবে আমি ভ্যুচুয়ালেনভকে সক্রিয় করার মতো বলে মনে করতে পারি না। যারা activateভার্চুয়ালেনভের সাথে পরিচিত নয় তাদের জন্য এটি একটি ফাইল তৈরি করে যা ভার্চুয়াল পরিবেশকে সক্রিয় করে activ সিএলআই থেকে আপনি এটি ব্যবহার করে চালানsource

source $env_name/bin/activate

যেখানে $ env_name, স্পষ্টতই, ভার্চুয়াল এনভিটি ইনস্টল করা সেই দির নাম।

আমার স্ক্রিপ্টে, ভার্চুয়াল পরিবেশ তৈরি করার পরে, আমি সক্রিয় স্ক্রিপ্টের জন্য পথটি এভাবে সংরক্ষণ করি:

activate="`pwd`/$ENV_NAME/bin/activate"

কিন্তু আমি যখন ফোন করি তখন আমি এটি source "$activate"পাই:

/home/clawlor/bin/scripts/djangoenv: 20: source: not found

আমি জানি যে $activateএতে অ্যাক্টিভেট স্ক্রিপ্টের সঠিক পথ রয়েছে, প্রকৃতপক্ষে আমি এমনকি টেস্ট করেছি যে কোনও ফাইল কল করার আগেই রয়েছে source। তবে sourceনিজেই এটি খুঁজে পাচ্ছে না। আমি সিএলআই-তে সমস্ত পদক্ষেপ ম্যানুয়ালি চালানোর চেষ্টা করেছি, যেখানে সবকিছু ঠিকঠাক কাজ করে।

আমার গবেষণায় আমি এই স্ক্রিপ্টটি পেয়েছি যা আমি যা চাই তার সাথে একই তবে এটি আমার প্রয়োজন হয় না এমন আরও অনেকগুলি কাজ করে যা একটি like / .virtualenv ডিরেক্টরিতে (বা যা কিছু আছে তাতে) ভার্চুয়াল পরিবেশের সমস্ত সঞ্চয় করে রাখার মতো doing $ WORKON_HOME)। তবে আমার কাছে মনে হয় যে তিনি পথ তৈরি করছেন এবং মূলত আমি একইভাবে activateকল source "$activate"করছি।

এটি সম্পূর্ণরূপে স্ক্রিপ্ট এখানে:

#!/bin/sh

PYTHON_PATH=~/bin/python-2.6.1/bin/python

if [ $# = 1 ]
then
    ENV_NAME="$1"
    virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
    activate="`pwd`/$ENV_NAME/bin/activate"

    if [ ! -f "$activate" ]
    then
        echo "ERROR: activate not found at $activate"
        return 1
    fi

    source "$activate"
else
    echo 'Usage: djangoenv ENV_NAME'
fi

অস্বীকৃতি: আমার বাশ স্ক্রিপ্ট-ফু বেশ দুর্বল। আমি সিএলআই-তে মোটামুটি আরামদায়ক, তবে এটি খুব ভাল বোকা কারণ থাকতে পারে না।

উত্তর:


230

আপনি যদি কোনও বাশ স্ক্রিপ্ট লিখছেন, নাম অনুসারে এটি কল করুন:

#!/bin/bash

/ বিন / শি বাশ হওয়ার নিশ্চয়তা নেই। এর ফলে উবুন্টুতে কয়েক বছর আগে (আইআইআরসি) এক টন ভাঙা লিপি তৈরি হয়েছিল।

উত্স অন্তর্নির্মিত ঠিক ঠিক কাজ করে; তবে আপনি ঠিক যেমন নরম্যানের পরামর্শ মতো ডট ব্যবহার করতে পারেন।


এই সমাধানটি মূলত নরম্যান রামসির উত্তরের একটি মন্তব্য ছিল। যেহেতু এটিই সমস্যাটি স্থির করেছে, তাই আমি এটিকে 'স্বীকৃত উত্তর' হিসাবে পরিবর্তন করেছি
ক্রিস লোলার

185

পসিক্স স্ট্যান্ডার্ডে, যার /bin/shসম্মান করা উচিত, কমান্ডটি .(একক বিন্দু), নয় sourcesourceকমান্ড একটি হল csh-ism যে মধ্যে টানা হয়েছে bash

চেষ্টা

. $env_name/bin/activate

অথবা bashআপনার কোডটিতে অবশ্যই পিজিক্স - বিজনেস থাকতে হবে , ব্যবহার করুন #!/bin/bash


1
এটি এটি স্থির করে। (পরিবর্তন / বিন / শ থেকে / বিন / বাশ) স্ক্রিপ্ট শেষ হওয়ার পরে কোনও কারণে পরিবেশটি সিএলআইতে সক্রিয় হয় না, তবে এটি একটি সামান্য সমস্যা।
ক্রিস লোলর

8
বাশ ম্যানুয়াল অনুসারে এর sourceপ্রতিশব্দ .
রিচার্ড হ্যানসেন

1
আমি এ জাতীয় প্রবেশদ্বার সহ একটি ডকারের ধারক ব্যবহার করার সময় এসেছি /bin/sh -c '/path/to/script.sh'। যদিও আমার স্ক্রিপ্টটি ব্যাশ স্ক্রিপ্ট ছিল, উত্সটি রফতানি উত্স করতে ব্যর্থ হয়েছিল। তবে "।" কাজ করছে!
নিখিল ওওয়ালেকার

31

উবুন্টুতে আপনি যদি স্ক্রিপ্টটি কার্যকর করেন তবে sh scriptname.shএই সমস্যাটি পান।

./scriptname.shপরিবর্তে স্ক্রিপ্ট কার্যকর করার চেষ্টা করুন ।


এটি করার সময় আমি সেগমেন্টেশন ত্রুটি পেয়েছি।
সর্বাধিক আবেদনকারী

1
ফাইল অবশ্যই সম্পাদনযোগ্য:chmod +x filename.sh
রেন্ডি

2
কোন ধারণা কেন এটি?
যুবাল আদম

আমার উবুন্টু
20.04 এর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.