বোর্ন শেল স্ক্রিপ্টের সমস্ত আউটপুট অন্য কোথাও পুনর্নির্দেশ করা সম্ভব, তবে স্ক্রিপ্টের ভিতরে শেল কমান্ডের সাহায্যে?
একটি একক কমান্ডের আউটপুট পুনঃনির্দেশ করা সহজ তবে আমি এর থেকে আরও কিছু চাই:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
অর্থ: স্ক্রিপ্টটি যদি অ-ইন্টারেক্টিভভাবে চালিত হয় (উদাহরণস্বরূপ, ক্রোন), তবে সমস্ত ফাইলের আউটপুট সংরক্ষণ করুন। যদি শেল থেকে ইন্টারেক্টিভভাবে চালিত হয় তবে আউটপুটটি যথারীতি স্টাডাউটে যেতে দিন।
আমি সাধারণত ফ্রিবিএসডি পর্যায়ক্রমিক ইউটিলিটি দ্বারা চালিত কোনও স্ক্রিপ্টের জন্য এটি করতে চাই। এটি দৈনিক রানের অংশ, যা আমি সাধারণত ইমেলটিতে প্রতিদিন দেখতে পাত্তা দিই না, তাই আমার কাছে এটি প্রেরণ করা হয়নি। যাইহোক, যদি এই একটি নির্দিষ্ট স্ক্রিপ্টের ভিতরে কিছু ব্যর্থ হয় তবে তা আমার পক্ষে গুরুত্বপূর্ণ এবং আমি প্রতিদিনের কাজের একটি অংশের আউটপুট ক্যাপচার এবং ইমেল করতে সক্ষম হতে চাই।
আপডেট: জোশুয়ার উত্তর স্পট-অন, তবে আমি পুরো স্ক্রিপ্টের চারপাশে স্টাডআউট এবং স্ট্ডারকে সংরক্ষণ এবং পুনরুদ্ধার করতে চেয়েছিলাম, যা এইভাবে করা হয়:
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
exec 1>&3 2>&4 3>&- 4>&-