স্ক্রিপ্ট চলাকালীন ত্রুটির বার্তা 'উত্স: পাওয়া যায় নি'


35

আমি একটি সামান্য স্বয়ংক্রিয় সেটআপ স্ক্রিপ্ট তৈরি করছি যা পরিবর্তিত হবে /etc/profileএবং $HOME/.profileযদি কিছু পাথ রফতানি না হয়। তারপরে, আমি এগুলি স্বয়ংক্রিয়ভাবে পুনরায় লোড করতে চাই।

আমি এটি পড়ে এটি পড়েছি sourceতাই আমি আমার টার্মিনালটি সরিয়ে প্রবেশ করলাম:

source /etc/profile
source ~/.profile

টার্মিনাল থেকে, এটি কোনও ত্রুটি আউটপুট করে নি।

তবে, এই দুটি কমান্ড বাশ স্ক্রিপ্টের ভিতরে রাখলে ফলাফল হয় source: not found

  1. আমি কীভাবে নিশ্চিত হতে পারি যে স্ক্রিপ্টটি বাশ দ্বারা নির্বাহ করা হয়েছে, এমনকি যদি #!/bin/shনির্দিষ্ট করে দেওয়া হয় (দৃশ্যত, এটি এর গ্যারান্টি দেয় না)?
  2. কেন এটি বলবে যে এই দু'টি উত্স যখন সেখানে নির্দ্বিধায় সেখানে পাওয়া যায় না?

উত্তর:


54

/bin/shনা bash। আপনার স্ক্রিপ্টটি কার্যকর করতে আপনার স্ক্রিপ্টের প্রথম লাইন হিসাবে bashলিখুন #!/bin/bash

ত্রুটি source: not foundবাদ দেওয়া হয়নি, কারণ /etc/profileএটি পাওয়া যায় নি। এটি ফেলে দেওয়া হয়েছে, কারণ sourceএটি পাওয়া যায় নি। sourceবাশ একটি অন্তর্নির্মিত ফাংশন, এবং আপনি স্ক্রিপ্টটি সম্পাদন করেন না bash। সুতরাং কেন এটি পাওয়া গেল না তা পরিষ্কার। #!স্ক্রিপ্টের লাইনটি পরিবর্তন করুন এবং এটি কার্যকর হবে।


9

১. আমি কীভাবে নিশ্চিত হতে পারি যে স্ক্রিপ্টটি বাশ দ্বারা নির্বাহ করা হয়েছে, #!/bin/shনির্দিষ্ট করা সত্ত্বেও (দৃশ্যত, এটি এর নিশ্চয়তা দেয় না)?

shশেলের জন্য লিখিত একটি স্ক্রিপ্ট (আপনার ক্ষেত্রে যেমন দেখুন - #! / Bin / sh এবং #! / Bin / bash? ) এর মধ্যে পার্থক্য কী তা বাশ দ্বারা কার্যকর করা হয়েছে, কেবল নীচের কমান্ডটি চালান:

bash script_name

সুতরাং, আপনি আর ত্রুটি পাবেন না।

২. কেন এটি বলবে যে এই দু'টি উত্স যখন সেখানে নির্দ্বিধায় রয়েছে, তারা খুঁজে পাওয়া যাবে না?

এটি বলা হয় না যে sour উত্সযুক্ত ফাইলগুলি সেখানে নেই। এটি বলে যে sourceকমান্ডটি পাওয়া যায় না। কারণ যেহেতু আপনি সঙ্গে আপনার স্ক্রিপ্ট শুরু এই স্বাভাবিক #!/bin/shলাইন, আপনার স্ক্রিপ্ট ব্যবহার করে চালানো হবে shনা এবং bashআপনি কি মনে করেন পারে। এটা স্বাভাবিক কেন? কারণ sourceকমান্ড একটি বাশ বিল্টিন, তবে shবিল্টিন নয়। কোনও ফাইল উত্স shকরতে আপনার .(ডট) ব্যবহার করা উচিত । উদাহরণ:

. /etc/profile
. ~/.profile

আরেকটি উপায় কুঁড়েঘর লাইন পরিবর্তন হয় #!/bin/bashযেমন বিশৃঙ্খলা বলেন তার উত্তর


4

এই তাই প্রশ্ন দেখুন :

/bin/shসাধারণত শেলটি নকল করার চেষ্টা করা অন্য কোনও শেল। অনেক বিতরণ এর জন্য /bin/bashব্যবহার করে sh, এটি উত্সকে সমর্থন করে। উবুন্টুতে, যদিও /bin/dashব্যবহার করা হয় যা উত্স সমর্থন করে না। আপনি যদি স্ক্রিপ্টটি সম্পাদনা করতে না পারেন, এটি চালিত শেলটি পরিবর্তন করার চেষ্টা করুন।


1

কিছু শেল এর .পরিবর্তে সমর্থন করে source। সুতরাং আপনি এই মত কিছু চেষ্টা করতে পারেন

. filename

পরিবর্তে

source filename

আশা করি এটা কাজ করবে

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