উত্তর:
দেখুন man tee
:
NAME: টি - স্ট্যান্ডার্ড ইনপুট থেকে পড়ুন এবং স্ট্যান্ডার্ড আউটপুট এবং ফাইলগুলিতে লিখুন
স্নোপিসিস: টি [বিকল্প] ... [ফাইল] ...
তদনুসারে:
echo test | tee file1 file2 file3
cmd 2>&1 | tee log1 log2
আমি উপরের মতো কার্যকর করার চেষ্টা করেছি, তবে এটি দ্বিতীয় লগ ফাইলটিতে পুনর্নির্দেশের জন্য আমার সিআরটিএল -সি টিপতে হবে। এছাড়াও আউটপুট কনসোলে মুদ্রিত হয়। আমি চাই কমান্ড আউটপুটটি লগগুলিতে পুনঃনির্দেশিত করা উচিত তবে কনসোলে নয়। কোন সাহায্য প্রশংসা করা হয়।
tee
কমান্ড লিখেছেন stdin
দায়ের করতে (গুলি) এবং এছাড়াও থেকে stdout
। আপনি যদি আউটপুটটি টার্মিনালে প্রদর্শিত না চান তবে /dev/null
আপনাকে সাধারণত পছন্দ করতে আপনাকে পুনর্নির্দেশ করতে হবে।
echo test | tee --append file1 file2
ধরা যাক আপনার আউটপুট একটি ফাংশন থেকে উত্পন্ন হয়েছে cmd()
:
cmd() {
echo hello world!
}
cmd
দুটি ফাইল থেকে আউটপুট পুনর্নির্দেশ করতে, তবে কনসোলে নয়, আপনি ব্যবহার করতে পারেন:
cmd | tee file1 file2 >/dev/null
এটি একাধিক ফাইলের জন্য কাজ করবে, যে কোনও উপাত্ত উত্স পাইপিংয়ের জন্য দেওয়া:
echo "foobarbaz" | tee file1 file2 file3 file4 > /dev/null
এটিও কাজ করবে:
echo $(cmd) | tee file1 file2 >/dev/null
/dev/null
পুনঃনির্দেশ ছাড়াই , টি নির্দিষ্ট ফাইলগুলি ছাড়াও স্টডআউটে আউটপুট প্রেরণ করবে ।
উদাহরণস্বরূপ, এটি কনসোল থেকে চালিত হলে আপনি সেখানে আউটপুট দেখতে পাবেন। কোনও ক্রন্টব থেকে চালানো, আউটপুটটি স্থিতি বার্তা উপস্থিত হবে যা আপনাকে প্রেরণ করা হয়েছে (গিলসের উত্তরটি এখানে https://unix.stackexchange.com/a/100833/3998 দেখুন )।
এটি আমার জন্য উবুন্টু 12.04-এ বাশে কাজ করেছে এবং জিএনইউ ব্যাশ 4.3.11 (1) ব্যবহার করে উবুন্টু 14.04 এ যাচাই করা হয়েছে, সুতরাং এটি কোনও সাম্প্রতিক জিএনইউ বাশ সংস্করণে কাজ করা উচিত।
version 4.3.11(1)-release (i686-pc-linux-gnu)
উবুন্টু 14.04-তে GNU বাশ ( ) এর অধীনে আমি এটি পরীক্ষা করেছি ।
এটি একটি পুরানো পোস্ট তবে আমি এখনই এটি খুঁজে পেয়েছি ...
আউটপুট আপনাকে পুনর্নির্দেশের পরিবর্তে > /dev/null
এটি শেষ ফাইলে পুনর্নির্দেশ করতে পারে:
echo "foobarbaz" | tee file1 > file2
অথবা আউটপুট সংযোজনের জন্য:
echo "foobarbaz" | tee -a file1 >> file2
-a
)
@ জোফেল উত্তরের মন্তব্যে যেমন উল্লেখ করেছেন, এটি স্থানীয়ভাবে করা যেতে পারে zsh
:
echo foobar >file1 >file2 >file3
বা, ব্রেস প্রসারিত সহ:
echo foobar >file{1..3}
অভ্যন্তরীণভাবে এটি tee
উপরে প্রদত্ত উত্তরের সাথে একইভাবে কাজ করে । শেল কমান্ডের স্টডআউটকে এমন একটি প্রক্রিয়ার সাথে সংযুক্ত করে যা একাধিক ফাইলগুলিতে পাইপ দেয়; অতএব, এইভাবে এটি করার কোনও বাধ্যতামূলক প্রযুক্তিগত সুবিধা নেই (তবে এটি সত্যই ভাল দেখাচ্ছে)। আরও জন্য zsh
ম্যানুয়াল দেখুন।
মন্তব্য করতে অক্ষম, তবে, প্রকাশ করার অন্য একটি উপায়
echo "foobarbaz" | tee file1 file2 file3 file4 file5 file6 file7 file8 > /dev/null
অনেকগুলি ফাইলের সাথে ডিল করার সময় এটিতে সহজ করা যায় Could
echo "foobarbaz" | tee file{1..8} > /dev/null
file1
মাধ্যমে file8
তাদের নাম এবং ঐ ফাইল নামের জন্য সম্ভবত মাত্র উদাহরণ প্লেসহোল্ডার হয়
zsh
, আপনি ব্যবহার করতে পারেনsome_command >output_log_1 >output_log_2
।