কোনও স্ক্রিপ্টের আউটপুট অনুলিপি একটি ফাইল প্রেরণ করুন


10

বলুন আমার কাছে একটি Zsh স্ক্রিপ্ট রয়েছে এবং আমি এটিকে আউটপুট প্রিন্ট করতে দিতে চাই STDOUT, তবে তার আউটপুটটিকে ডিস্কের কোনও ফাইলের অনুলিপি (ডাম্প) করতে চাই।

তদতিরিক্ত, স্ক্রিপ্ট নিম্নলিখিত বিকল্প দিয়ে শুরু হয়

set -o xtrace

যা এটিকে ভার্জোজ হতে বাধ্য করে এবং এটি চালিত আদেশগুলি মুদ্রণ করে। আমি এই আউটপুটটি পাশাপাশি ডিস্কে একটি ফাইল ক্যাপচার করতে চাই।

আমার বোধগম্যতা যদি তা করি তবে

./my_script.sh > log.txt

এটা শুধু পাঠাব STDOUTকরতে log.txt, কিন্তু কি আমি যদি টার্মিনালে আউটপুট দেখতে সক্ষম হতে চান?

আমি Zsh এ teeএবং MULTIOSবিকল্প সম্পর্কে পড়েছি , তবে সেগুলি কীভাবে ব্যবহার করব তা নিশ্চিত নই।

যখন আমি করি:

./my_script | tee log.txt

আমি টার্মিনালে আউটপুট দেখতে পাচ্ছি, তবে ফাইলটি log.txtসমস্ত কিছু ক্যাপচার করতে পারে না (বাস্তবে এটি সবেমাত্র কিছু ক্যাপচার করে)।


./my_script.sh > log.txt 2>&1
মাইক্রজারভ

দেখে মনে হচ্ছে আপনি scriptকমান্ডটি সন্ধান করছেন। বা হতে পারেmyscript >&1 > log.txt 2>&1
স্টাফেন চেজেলাস

উত্তর:


12

এটা হতে পারে যে আপনার স্ক্রিপ্টটি আউটপুট উৎপাদন করা হয় stdoutএবং stderr, এবং আপনি শুধুমাত্র আপনার লগ ফাইল সেই স্ট্রিম আউটপুট এক পাচ্ছেন।

./my_script.sh | tee log.txtপ্রকৃতপক্ষে টার্মিনালে সবকিছু আউটপুট হবে, কিন্তু শুধুমাত্র লগফাইলে ডাম্প হবে stdout

./my_script.sh > log.txt 2>&1 বিপরীতে কাজ করবে, লগ ফাইলে সবকিছু ফেলে দিবে, তবে স্ক্রিনে কিছুই প্রদর্শন করবে না।

কৌশলটি হল দুটি সাথে একত্রিত করা tee:

./myscript.sh 2>&1 | tee log.txt

এটি stderr( 2) কে stdout( 1) এ পুনর্নির্দেশ করে , তারপরে পাইপগুলি stdoutপ্রবেশ করে tee, যা এটি টার্মিনালে এবং লগ ফাইলটিতে অনুলিপি করে ।

zshMultios সমতুল্য হবে:

./myscript.sh >&1 > log.txt 2>&1

এটি হ'ল স্ট্ডআউটকে মূল স্টডআউট এবং লগ.টেক্সট উভয়ই পুনঃনির্দেশ করুন (অভ্যন্তরীণভাবে পাইপের মাধ্যমে কোনও কিছুতে কাজ করে tee) এবং তারপরে স্ট্যাডারটিকেও (অভ্যন্তরীণ teeপ্রক্রিয়াতে পাইপের দিকে) পুনর্নির্দেশ করুন ।


ধন্যবাদ - আপনার শেষ লাইনটি সম্পর্কে, কেন নয় ./myscript.sh >&1 2>&1 > log.txt? (অর্থাত্ শেষ দুটি পুনর্নির্দেশের ক্রমটি পরিবর্তন করা)। তাদের মধ্যে কি কোনও পার্থক্য থাকবে?
আমিলিও ওয়াজকেজ-রেইনা

আপনার বৈকল্পিক আউটপুট দেয় না stdout, কেবল log.txt। উত্তরের শেষ লাইন (@ স্টাফেনচাজেলাস এবং আমার দ্বারা নয়) উভয়কেই আউটপুট দেয়।
সাওয়ান্তো

0

কনসোলটি মারা গেলে বা বন্ধ হয়ে গেলেও লম্বা ব্যাকআপ ইত্যাদির জন্য দরকারী, নোহপ একটি কাজ চালিয়ে যাওয়ার অনুমতি দেয় তবে এখানে আমরা এর স্বয়ংক্রিয় লগিং ব্যবহার করছি।

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