প্যাচ প্রয়োগের আগে কোনও ফাইল ইতিমধ্যে প্যাচ করা হয়েছে কিনা তা জানা সম্ভব?
আমার কোনও স্ক্রিপ্টে এটি করা দরকার, কোন চিন্তা?
প্যাচ প্রয়োগের আগে কোনও ফাইল ইতিমধ্যে প্যাচ করা হয়েছে কিনা তা জানা সম্ভব?
আমার কোনও স্ক্রিপ্টে এটি করা দরকার, কোন চিন্তা?
উত্তর:
হ্যাঁ, কেবল বিকল্প patch
দিয়ে চালান --dry-run
, এটি হয় ব্যর্থ হয় বা সফল হয় যা এর প্রস্থান স্থিতি দিয়ে খুঁজে পাওয়া যাবে।
তবে আরও সাধারণ (এবং ত্রুটির প্রবণ) উপায়ে আপনাকে সম্ভবত এটি -R
বিকল্প দিয়ে চালাতে হবে যার অর্থ "বিপরীত" কেবলমাত্র যদি এটি পুরো প্যাচটি ফিরিয়ে দিতে সক্ষম হয় তবে এটি "প্রয়োগকৃত" হিসাবে বিবেচিত হতে পারে। অন্যথায় ('-আর' ছাড়া) মূল ফাইলের কিছু অংশ পরিবর্তিত হওয়ার কারণে এটি ব্যর্থ হতে পারে। নীচে একটি সাধারণ উদাহরণ দেওয়া হল:
if ! patch -R -p0 -s -f --dry-run <patchfile; then
patch -p0 <patchfile
fi
(এমনকি, উপরের স্নিপেটে আপনি এমনকি patch
তার স্টাডাউট এবং স্টাডারকে সম্পূর্ণরূপে পুনর্নির্দেশ করে চুপ করে থাকতে পছন্দ করতে পারেন /dev/null
)
-sf
করার চেষ্টা করুন patch
(হিসাবে এটি লিখিত হতে পারে patch -Rsfp0 --dry-run
)
এটি যদি কাউকে সহায়তা করে তবে আপনি যদি ব্যাশ স্ক্রিপ্ট ব্যবহার করেন তবে সর্বজ্ঞানী দ্বারা প্রদত্ত উদাহরণটি কার্যকর হবে না। ব্যাশে সফল কমান্ডের প্রস্থান স্থিতি 0 হয়
সুতরাং নিম্নলিখিত কাজ করবে:
patch -p0 -N --dry-run --silent < patchfile 2>/dev/null
#If the patch has not been applied then the $? which is the exit status
#for last command would have a success status code = 0
if [ $? -eq 0 ];
then
#apply the patch
patch -p0 -N < patchfile
fi
1
পরিবর্তে 0
if [ $? -eq 1 ]
true
if এর উদ্দেশ্যে বিবেচনা করে। অবশ্যই কারণ বেশিরভাগ কমান্ড সাফল্য নির্দেশ করতে 0 এর একটি প্রস্থান কোড ব্যবহার করে।
এখানে অনুমান করে ধরে নেওয়া যায় যে আপনি patch
ইউটিলিটিটি ব্যবহার করছেন এবং প্যাচ করার জন্য প্রতিটি ফাইলের নিজস্ব প্যাচ রয়েছে:
if patch <options> -N --dry-run --silent <patchfile 2>/dev/null; then
echo The file has not had the patch applied,
echo and the patch will apply cleanly.
else
echo The file may not have had the patch applied.
echo Or maybe the patch doesn't apply to the file.
fi
-B
বিকল্পটি সহ প্রথম প্যাচটি চালাতে পারবেন , যার ফলে ব্যাকআপ তৈরি হতে পারে। তারপরে আপনি ব্যাকআপটির অস্তিত্ব পরীক্ষা করে দেখুন।
nohup
সেই if
ক্ষেত্রে ব্যবহার করতে বেছে নিয়েছেন তার বিষয়ে আপনি কিছুটা প্রসারিত করতে পারেন ?
আমার ক্ষেত্রে আমি এই চেকটি তৈরি করতে চেয়েছিলাম যাতে প্যাচ কমান্ড চালানো কোনও ইন্টারেক্টিভ টার্মিনালটি দিয়ে কী করা উচিত (বিশেষত সিআইয়ের জন্য) জিজ্ঞাসা না করে।
দেখা যাচ্ছে যে আপনার যদি কেবল প্রয়োজন হয় আপনি --forward
আর্গুমেন্টটিও ব্যবহার করতে পারেন এবং এটি ইতিমধ্যে প্রয়োগ করা থাকলে প্যাচটি এড়িয়ে যাবেন!