Command সময় কমান্ড`-এ একটি কমান্ডের আউটপুট পুনঃনির্দেশ করুন `


11

আমি কিছু ব্যবহার করে সময় দেওয়ার চেষ্টা করছি:

/usr/bin/time myCommand

তবে যেহেতু স্ট্ডারকে লিখেছেন /usr/bin/time, মাইকম্যান্ড যদি স্ট্ডারকেও লিখেন, আমি স্রোতে সময়ের আউটপুটের চেয়ে আরও বেশি পাই। আমি যা করতে চাই তা হ'ল মাইকম্যান্ডের সমস্ত আউটপুট এতে পুনঃনির্দেশিত করা /dev/null, তবে এখনও সময়ের আউটপুটটি স্ট্যাডারে লিখুন। মাইকমন্ড একটি উদাহরণ ব্যবহার করে যা স্টাডারকে লিখেছে ls /nofile, আমরা দেখতে পাচ্ছি যে (স্পষ্টত) নিম্নলিখিতগুলির সাথে কোনও আউটপুট নেই:

$ /usr/bin/time ls /nofile 2> /dev/null
$

কোনও পুনঃনির্দেশ ছাড়াই, আমরা আউটপুট ls(স্ট্যাডার থেকে) এবং সময় থেকে আউটপুট উভয়ই দেখতে পাই (এছাড়াও স্ট্ডার থেকে):

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

আমি যা চাই তা হ'ল এমন কিছু যা সহজভাবে উত্পন্ন করে:

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

কোন ধারনা?


আমি স্ক্রিপ্ট ফাইলে টাইম কমান্ড ব্যবহার করছি। আমি স্টার্ডারের পরিবর্তে স্টাডআউটে সময় আউটপুট চাই। আমি এটা কিভাবে পেতে পারি?

উত্তর:


20

Ksh, bash এবং zsh এ, timeএকটি কীওয়ার্ড, বিল্টিন নয়। একই লাইনে পুনঃনির্দেশগুলি কেবল কমান্ডের সাথে প্রযোজ্য, timeনিজের আউটপুটটিতে নয়।

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

timeএই শেলগুলিতে আউটপুট নিজেকে থেকে পুনর্নির্দেশ করতে আপনার অতিরিক্ত স্তরের গোষ্ঠীকরণের প্রয়োজন।

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

আপনি যদি স্ট্যান্ডেলোন timeইউটিলিটির জিএনইউ সংস্করণ -oব্যবহার করেন তবে timeস্ট্যাডারের চেয়ে অন্য কোথাও আউটপুট লেখার বিকল্প রয়েছে । আপনি timeটার্মিনালে লিখতে পারেন :

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

আপনি যদি আউটপুটটিকে timeতার স্ট্যান্ডার্ড ত্রুটি থেকে রাখতে চান তবে আপনার অতিরিক্ত স্তরের ফাইল বর্ণনাকারী শাফলিংয়ের প্রয়োজন।

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

যে কোনও timeইউটিলিটি সহ, আপনি পছন্দসই পুনর্নির্দেশগুলি সম্পাদন করতে একটি মধ্যবর্তী শেলটি ডেকে আনতে পারেন। অতিরিক্ত ক্রিয়াকলাপ যেমন cdপুনর্নির্দেশগুলি ইত্যাদি সম্পাদনের জন্য একটি মধ্যবর্তী শেলটি ডাকা খুব সাধারণ - এটি শেলগুলি ডিজাইনের জন্য তৈরি ছোট ছোট জিনিস kind

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

কয়েকটি ফলোআপ: 1) আপনার শেষ পরামর্শে 'এক্সিকিউটর' কী করে? এটি এটি ব্যতীত কাজ করছে বলে মনে হচ্ছে: / usr / bin / সময় sh -c 'exec ls / nofile &> ./ আউটপুট.ড্যাট' ২) একটি "মধ্যবর্তী শেল" "সাবশেল" এর সমান (যা আপনি পেয়ে যাবেন) বন্ধনী ব্যবহার করে ভাবেন?)। আমি / usr / bin / সময় (ls / nofile &> ./ আউটপুট.ড্যাট) এর মতো কিছু চেষ্টা করে যাচ্ছি। 3) / দেব / টিটি কি? আমি জানি tty0 হল স্টিডিন, tty1 = stdout, tty2 = stderr, তবে কেবল 'tty' কী?
ডেভিড ডরিয়া

৪) / dev / fd3 বিকল্পের সাহায্যে মনে হয় আপনি -o আউটপুটটি 3 লিখে লিখবেন, তারপরে 3 থেকে 2, 1 টি নাল থেকে এবং 2 টি নাল থেকে পুনর্নির্দেশ করতে পারেন। পুনর্নির্দেশগুলি বাম থেকে ডানে ঘটে যাওয়ার পরেও কি 3 টি বাতিল করতে পাঠানো উচিত নয়?
ডেভিড ডরিয়া

1
@ ডেভিডডোরিয়া execসেই প্রোগ্রামটিকে সাবপ্রসেস হিসাবে চালানোর পরিবর্তে নির্দিষ্ট প্রোগ্রাম দ্বারা শেলটি প্রতিস্থাপন করে। কোনও স্ক্রিপ্ট যখন কোনও কমান্ড শেষ হয় তখন কিছু শেল স্বয়ংক্রিয়ভাবে এই অপ্টিমাইজেশন সম্পাদন করে। "মধ্যবর্তী শেল" এর অর্থ কেবল এটি: একটি শেল যা এর মধ্যে timeএবং mycommand; এটি সাব-শেলের সাথে সম্পর্কিত নয়। /dev/ttyকমান্ডটি চলছে এমন টার্মিনালটি (এটি সম্পর্কিত নয় /dev/ttyNUMযা শারীরিক কনসোলগুলি; আপনি ফাইল বর্ণনাকারীদের সাথে বিভ্রান্ত করছেন: স্টিডিন হ'ল /dev/fd/0, ইত্যাদি)।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

@ ডেভিডডোরিয়া কোন ফাইল বর্ণনাকারীর সাথে কী সংযুক্ত রয়েছে তা পরিবর্তন করা বাম থেকে ডানে ঘটে যা এর বিপরীত প্রভাব ফেলে। দেখুন unix.stackexchange.com/questions/23964/... বা unix.stackexchange.com/questions/37660/order-of-redirections
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

0
[artur@asus-ux21e ~]$ find /etc/pki/CA/private/
/etc/pki/CA/private/
find: ‘/etc/pki/CA/private/’: Permission denied
[artur@asus-ux21e ~]$ time (find /etc/pki/CA/private/ &> /dev/null)

real    0m0.006s
user    0m0.001s
sys 0m0.004s

এটি একই 'সময়' নয় (এটি আমি বিশ্বাস করি এমন একটি বাশ ওরফে)। মনে রাখবেন যে এটি কোনও বুদ্ধিমান পুনঃনির্দেশের নিয়ম অনুসরণ করে না? $ সময় &> / দেব / নাল বাস্তব 0m0.000s ব্যবহারকারী 0m0.000s sys 0m0.000s
ডেভিড ডরিয়া

1
এটি সম্পর্কে: / ইউএসআর / বিন / সময়-ও সময় / ইউএসআর / বিন / সন্ধান / ইত্যাদি / পিকি / সিএ / প্রাইভেট / এবং> / দেব / নাল; বিড়াল সময়
আর্টুর সিজম্যাজাক

হ্যাঁ আমি এটি দেখেছি, তবে -o -র মতো অভ্যন্তরীণ প্রক্রিয়া ব্যবহার না করে কীভাবে এটি করা যায় সে সম্পর্কে আমি আরও কৌতূহলী ছিলাম।
ডেভিড ডরিয়া

@ ডেভিডডোরিয়া আপনাকে কী এমন ছাপ দিচ্ছে যে timeবাশ ওরফে? CentOS 5.7 এ which timeপ্রদর্শিত /usr/bin/timeহয়।
টিমোথি মার্টিন

type timeআপনাকে দেখাবে:time is a shell keyword
আর্টুর সিজেমকাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.