প্রথমত, যদি স্ক্রিপ্টটি কোনও সিস্টেম ডিমন দ্বারা চালিত হয় এবং সেই ডিমন মূল বৈশিষ্ট্যের সাথে চলতে থাকে, আপনাকে ব্যবহার করার দরকার নেই sudo
। এর মধ্যে init
(এবং systemd
) অন্তর্ভুক্ত রয়েছে rc.local
। যদি সেই ডিমন রুট সুবিধাগুলি নিয়ে চলমান না থাকে sudo
তবে যদি /etc/sudoers
(যেমন কোনও পাসওয়ার্ড ছাড়াই) কনফিগার করা না থাকে তবে কাজ করবে না । ব্যবহারকারীকে pi
ডিফল্টরূপে কিছু করার অনুমতি দেওয়া হওয়ায় রাস্পবিয়ান ব্যবহারকারীগণ এতে বিভ্রান্ত হতে পারেন (এবং যদি আপনি /etc/sudoers
এটি দেখতে পান তবে এটি কীভাবে সম্পন্ন হয়েছে তা দেখতে পাবেন)।
এরপরে, আপনি কোনও bash
স্ক্রিপ্ট বা বাশ স্ক্রিপ্টের অভ্যন্তরে কোনও কমান্ডের কোনও সেট, আউটপুট ক্যাপচার করে এটিকে এই জাতীয় সাবশেলে চালিত করে: 1
(
/bin/foo on 3
sudo bar a
) &> /var/log/myTestLog.txt
()
ইঙ্গিত একটি subshell । এর অভ্যন্তরীণ যে কোনও কিছুই থেকে সমস্ত আউটপুট একটি /var/log/myTestLog.txt
ফাইলে পুনর্নির্দেশ করা হচ্ছে । কয়েকটি নোট:
&>
একটি হল bashism , তাই যদি স্ক্রিপ্ট একটি মাধ্যমে মৃত্যুদন্ড কার্যকর করা হয় কুঁড়েঘর প্রথম লাইন উপর, এটা করা উচিত #!/bin/bash
, শুধু না /bin/sh
। "বাশিজম" কেবল শেলটিতে কাজ করে bash
।
এর মধ্যে অন্তর্ভুক্ত রয়েছে /etc/rc.local
, যা ডিফল্টরূপে ব্যবহার করে /bin/sh
(যেমন, হ্যাঁ, আপনি নিরাপদে এতে পরিবর্তন করতে পারেন /bin/bash
)।
/var/log
লিখতে রুট সুবিধার দরকার। যদি প্রক্রিয়াটির তেমন কিছু না থাকে তবে আপনি এটি জানেন এমন ডিরেক্টরি ব্যবহার করুন বা তৈরি করুন। যখন সন্দেহ হয়, আপনি যদি সিস্টেমটি বন্ধ বা পুনরায় বুট না করে এটি পরীক্ষা করতে পারেন তবে এটি ব্যবহার করুন /tmp
যা বিশ্ব লিখনযোগ্য (যেমন, কারও দ্বারা)। তবে /tmp
বুট জুড়ে স্থির থাকে না। এটি একটি ছোট, র্যাম ভিত্তিক পার্টিশনও তাই এটিতে জিগের ডেটা লিখবেন না। এটি আপনার এসডি কার্ড নয় [বাস্তবে এটি রাস্পবিয়ানের বর্তমান সংস্করণগুলিতে রয়েছে তবে অনুশীলনে এটি বিবেচনা করবেন না] ।
&>
কিছুতেই ওভাররাইট করবে myTestLog.txt
। পরিবর্তে আপনি যদি কোনও বিদ্যমান লগতে সংযুক্ত করতে চান, যা ডিবাগিংয়ের উদ্দেশ্যে ভাল ধারণা হতে পারে, ব্যবহার করুন &>>
। তারপরে আপনি এই সাব-শেলের শুরুতে একটি কমান্ড যুক্ত করতে পারেন:
echo Starting $(date)
প্রতিটি রান থেকে তথ্য আলাদা করা। এটি কী করে তা আপনি যদি নিশ্চিত না হন তবে কমান্ড লাইনে চেষ্টা করুন।
এই শেষ পয়েন্টটি এমন কোনও কিছুর একটি ভাল চিত্র যা আপনি যে কমান্ডগুলি দিয়ে আউটপুট আনেন না সে সম্পর্কে কিছু করতে পারেন - তবে তাদের বেশিরভাগই যদি আপনি অন্তর্ভুক্ত করেন তবে উদাহরণস্বরূপ, -v
"ভার্বোজ" এর জন্য। কিছু আদেশের বিষয়ে সাবধান থাকুন এর -v
অর্থ "মুদ্রণ সংস্করণ তথ্য"। কমান্ডের জন্য এবং কীভাবে এটি কাজ করবে তা নিশ্চিত হওয়ার জন্য ম্যান পৃষ্ঠাতে একবার দেখুন (কিছু কমান্ডও এর চেয়ে আলাদা সুইচ ব্যবহার করে -v
)।
কনভেনশন দ্বারা, কমান্ডগুলি সম্পূর্ণ হওয়ার পরে 0 এর মানও দেয়। এটিকে কখনও কখনও "প্রস্থান স্থিতি" বলা হয় এবং আপনি সাধারণত এটি দেখতে পাবেন না, তবে শেলটি আপনাকে প্রদর্শন করবে echo $?
। চেষ্টা
ls /
echo $?
ls /nonexistantdir
echo $?
আপনি 0 এবং 2 পাবেন you আপনি যদি ls
"প্রস্থান স্থিতি" এর অধীনে ম্যান পৃষ্ঠাটিতে সন্ধান করেন তবে আপনি বরং অনির্বচনীয়, গুপ্তচর দেখতে পাবেন:
2 if serious trouble (e.g., cannot access command-line argument).
যা কিছু না থেকে ভাল হতে পারে বা নাও হতে পারে তবে আপনি সেখানে যান।
খুব কমপক্ষে, এটি নির্দেশ করে যে কোনও কারণে কমান্ডটি ব্যর্থ হয়েছে। প্রস্থান স্থিতি আপনাকে এ জাতীয় কিছু করতে দেয়:
/bin/foo && sudo bar
&&
এই ক্ষেত্রে অর্থ হলো "যদি প্রথম কমান্ড সফল", প্রথম কমান্ড সাহসী 0 ফিরে সম্মেলন করে (যার কারণে তারা সাধারণত না)। যদি /bin/foo
কাজ না করে, পাওয়া যায় না, ইত্যাদি, তবে sudo bar
কখনই ঘটবে না।
লগিং বার্তাগুলি এবং শর্তসাপেক্ষ কার্যকরকরণের সংমিশ্রণ ( &&
) ব্যবহার করে আপনাকে সমস্যাটি নির্ণয়ের আরও কাছাকাছি পৌঁছে দেওয়া উচিত, বা সমস্যা সমাধানে সহায়তা করতে অন্যের পক্ষে কার্যকর হতে পারে এমন তথ্য প্রাপ্ত করা উচিত। তা ছাড়া, অন্য যে কেউ প্রায়শই করতে পারেন অনুমান।
1. আপনি অভ্যন্তরীণ থেকে সম্পূর্ণ স্ক্রিপ্টের জন্য একই আউটপুট পুনঃনির্দেশটি ব্যবহার করে ব্যবহার করতে পারেন:
exec &> /var/log/myTestLog.txt
শীর্ষে (বা অন্য যে কোনও জায়গায় এবং এটি পরবর্তী প্রতিটি ক্ষেত্রে প্রযোজ্য হবে)।
U&L
। আমি শিরোনামটি ভুলভাবে পড়েছি এবং "ডিবাগিংয়ের জন্য কোনও সিস্টেম স্ক্রিপ্টের আউটপুট লগইন করা" উদ্দেশ্যটি আরও পরিষ্কার করে দেবে বলে পরামর্শ দেব। এছাড়াও আমি যখন এইfoo
bar
উদাহরণগুলি পড়ি তখন আমার মস্তিষ্ক হিমশীতল হয়, আমি এমন কোনও কিছুকে পছন্দ করি যা আরও বাস্তব বিশ্বের দেখায়। আমি কোনও পোস্ট সম্পাদনা করতে নারাজ, সুতরাং আপনি যদি এটির উন্নতি হতে পারে বলে মনে করেন এটি আপনার কাছে ছেড়ে দেব।