শেল স্ক্রিপ্টের সমস্ত ক্রিয়াকলাপ লগ করার কোনও সহজ উপায় আছে কি?


18

শেল স্ক্রিপ্ট থেকে কোনও ফাইলে ঘটে যাওয়া সমস্ত ক্রিয়াকলাপ লগ করার কি সহজ উপায় আছে?

আমার একটা স্ক্রিপ্ট আছে এটি প্রতিধ্বনি "নির্দেশাবলী" এর পাশাপাশি অন্যান্য প্রোগ্রাম আউটপুট যেমন আউটপুট করে। আমি আদেশগুলি জানি:

command | tee -a "$log_file"

এবং

command >> logifle.log

আমি যা জিজ্ঞাসা করছি তা হ'ল লগিংয়ের জন্য শেল প্যারামিটার আছে, বা একটি সেট কমান্ড আমি ব্যবহার করতে পারি বা এর মতো কিছু। আমি অগত্যা কয়েক ডজন পুনর্নির্দেশনা বা ফাইলগুলিতে টি যুক্ত করতে চাই না যদি আমার না হয়। যদিও আমি এখনও স্টাডি আউটপুট পেতে চাই - আমি এটির লগইন করতে চাই ::wq



1
এটি আমার মনকে ছাপিয়ে যায় যে বেশিরভাগ লোকের পরিবর্তে এটি করা হয় বলে মনে হয়: x
ক্ষমা চেয়ে নিন এবং মনিকা পুনরুদ্ধার করুন

উত্তর:


18

আপনি যদি সাধারণত স্ক্রিপ্টটি দিয়ে foo.shচালনা করেন তবে এটিকে চালানোর চেষ্টা করুন (এটি একটি বাশ স্ক্রিপ্ট ধরে) bash -x foo.sh। আপনি যদি ফাইলটিতে পুনঃনির্দেশিত সবকিছু চান তবে চেষ্টা করুন bash -x foo.sh > file.log 2>&1(নোট করুন আমি স্টাডারকেও পুনঃনির্দেশ করছি, 2>&1আপনি এটি না চাইলে অপসারণ করুন )। আপনি যদি দেখতে চান তবে কী চলছে bash -x foo.sh 2>&1 | tee log.file,।


20

একটি খুব সহজ এবং সহজ উপায় আছে:

scriptটার্মিনাল সেশনের টাইপ স্ক্রিপ্ট তৈরি করতে ব্যবহার করে

  1. কমান্ড শুরু করুন script

    যুক্তি fileযদি দেওয়া হয়, যেমন script ~/tmp/output, scriptএই ফাইলটিতে কথোপকথন সংরক্ষণ করে। যদি কোনও ফাইলের নাম দেওয়া না হয় তবে ডায়লগটি ফাইলটিতে সংরক্ষণ করা হয়typescript

  2. আপনার স্ক্রিপ্ট বা আপনি যা শুরু করতে চান তা শুরু করুন

  3. আপনার স্ক্রিপ্টটি সমাপ্ত হয়, তাহলে স্টপ scriptমাধ্যমে Ctrl-D

  4. ডিফল্ট আউটপুট ফাইলের আউটপুট পরীক্ষা করুন typescript


আপনার কমান্ডটি এক ধাপে শুরু করতে scriptপ্যারামিটারটি ব্যবহার করুন-c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

scriptআপনার স্ক্রিপ্টের অভ্যন্তরের ব্যবহারের কোনও অর্থ নেই কারণ scriptশেলটি কাঁটাচামচ করে বা একটি নতুন শেল শুরু করে।

চলক শেলটি যদি বিদ্যমান থাকে তবে স্ক্রিপ্ট দ্বারা চিহ্নিত শেলটি সেই শেলটিই হবে। যদি শেল সেট না করা থাকে তবে বোর্ন শেল ধরে নেওয়া হবে। (বেশিরভাগ শেল স্বয়ংক্রিয়ভাবে এই পরিবর্তনশীল সেট করে)।


4
@ ফ্যাবি আমার উত্তরটি পছন্দ করেছেন তবে আমি সামান্য ধূসর জিনিসটি দেখতে পাচ্ছি না;)
এবি

আমি ব্যবহার করি script logfilename, তাই আমি এটি বাছাই করব।
জুলাইয়ের ভল্টিনেটর

আমি কি আমার শেল প্রোগ্রাম থেকে "স্ক্রিপ্ট" কল করতে পারি?
j0h

1
এটি কোনও অর্থ দেয় না, আমার উন্নত উত্তর দেখুন।
এবি

1
+1 টি। এই উত্তরের জন্য ধন্যবাদ :-) scriptএকটি ফিফোর মাধ্যমেও একটি তদারকি দরকারী। থেকে man script: " -f, --flush। প্রতিটি লেখার পর ফ্লাশ আউটপুট এই telecooperation জন্য চমৎকার হল: এক ব্যক্তি আছে mkfifo foo; script -f foo, এবং অন্য রিয়েল-টাইম কি ব্যবহার করা হচ্ছে তদারকি করতে cat foo"। এটি কোনও প্রোগ্রাম যখন ইনপুটটির জন্য অপেক্ষা করে থাকে বা উদাহরণস্বরূপ ফিফোর টাইমস্ট্যাম্প পর্যবেক্ষণ করে তা পর্যবেক্ষণ করতে ব্যবহার করা যেতে পারে।
সুডোডাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.