হ্যাঁ শেলস এবং bashবিশেষত, ফাইলগুলি একবারে এক লাইনে পড়তে সতর্ক থাকে, তাই এটি আপনি যখন ইন্টারেক্টিভভাবে ব্যবহার করেন তখন একই কাজ করে।
আপনি লক্ষ্য করবেন যে ফাইলটি যখন (যেমন পাইপের মতো) সন্ধানযোগ্য না হয়, bashএমনকি \nঅক্ষরটি অতীতটি না পড়ে তা নিশ্চিত হওয়ার জন্য এমনকি একবারে একটি বাইটও পড়ে । ফাইলটি সন্ধানযোগ্য হলে এটি একবারে সম্পূর্ণ ব্লকগুলি পড়ে উপযুক্ত করে তবে এর পরে ফিরে যেতে চেষ্টা করে \n।
এর অর্থ আপনি এই জাতীয় জিনিসগুলি করতে পারেন:
bash << \EOF
read var
var's content
echo "$var"
EOF
অথবা স্ক্রিপ্টগুলি লিখুন যা নিজেরাই আপডেট করে। যা আপনাকে যদি গ্যারান্টি দেয় না তবে আপনি তা করতে সক্ষম হবেন না।
এখন, এটি বিরল যে আপনি things জাতীয় জিনিসগুলি করতে চান এবং যেমনটি আপনি খুঁজে পেয়েছেন যে বৈশিষ্ট্যটি দরকারী হিসাবে এটি প্রায়শই প্রায় পেতে চলেছে।
এটি এড়ানোর জন্য, আপনি চেষ্টা করে নিশ্চিত করতে পারেন যে আপনি জায়গাটিতে ফাইলটি সংশোধন করছেন না (উদাহরণস্বরূপ, একটি অনুলিপি সংশোধন করুন এবং অনুলিপিটি জায়গায় স্থানান্তরিত করুন (যেমন sed -iবা perl -piকিছু সম্পাদক যেমন উদাহরণস্বরূপ করেন))।
অথবা আপনি আপনার স্ক্রিপ্টটি লিখতে পারেন:
{
sleep 20
echo test
}; exit
(দ্রষ্টব্য যে এটি exitএকই লাইনে থাকা গুরুত্বপূর্ণ }; যদিও আপনি এটি বন্ধনীটির ঠিক আগে এটি বন্ধনীগুলির মধ্যে রাখতে পারেন)।
বা:
main() {
sleep 20
echo test
}
main "$@"; exit
শেলটির exitকোনও কিছু শুরু করার আগে পর্যন্ত স্ক্রিপ্টটি পড়া দরকার । এটি নিশ্চিত করে যে শেলটি আবার স্ক্রিপ্ট থেকে পড়বে না।
এর অর্থ যদিও পুরো স্ক্রিপ্টটি মেমোরিতে সংরক্ষণ করা হবে।
এটি স্ক্রিপ্টের বিশ্লেষণকেও প্রভাবিত করতে পারে।
উদাহরণস্বরূপ, এতে bash:
export LC_ALL=fr_FR.UTF-8
echo $'St\ue9phane'
UTF-8 এ এনকোড করা U + 00E9 আউটপুট দেয়। তবে আপনি যদি এটিকে পরিবর্তন করেন:
{
export LC_ALL=fr_FR.UTF-8
echo $'St\ue9phane'
}
\ue9অক্ষরসেট যে সময়ে কার্যকর ছিল যে কমান্ড পার্স করা হয় এই ক্ষেত্রে হয় যা সম্প্রসারিত হবে আগেexport কমান্ড মৃত্যুদন্ড কার্যকর করা হয়।
আরও মনে রাখবেন যে যদি কয়েকটি শাঁস সহ যদি sourceআর্ফ .আদেশটি ব্যবহৃত হয় তবে আপনার উত্সযুক্ত ফাইলগুলির জন্য একই ধরণের সমস্যা হবে problem
যে ক্ষেত্রে নয় এর bashযার যদিও sourceকমান্ড এটা ব্যাখ্যা করার আগে সম্পূর্ণরূপে ফাইল পড়া হয়। bashবিশেষভাবে লিখতে থাকলে , আপনি স্ক্রিপ্টের শুরুতে যুক্ত করে বাস্তবে এটি ব্যবহার করতে পারেন:
if [[ ! $already_sourced ]]; then
already_sourced=1
source "$0"; exit
fi
(আমি এটির উপর নির্ভর করব না যদিও আপনি ভবিষ্যতের সংস্করণগুলি bashএমন আচরণটি পরিবর্তন করতে পারবেন যা বর্তমানে সীমাবদ্ধতা হিসাবে দেখা যেতে পারে (ব্যাশ এবং এটিএন্ডটি টিএসএইচএস কেবল পসিক্সের মতো শেল যা যতদূর বলতে পারে) এবং already_sourcedকৌশলটি কিছুটা ভঙ্গুর কারণ এটি ধরে নিয়েছে যে ভেরিয়েবল পরিবেশে নেই, এটি BASH_SOURCE ভেরিয়েবলের সামগ্রীকে প্রভাবিত করে তা উল্লেখ করার প্রয়োজন নেই)