/ Usr / বিন / সময় কার্যকর করার সময় এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই


11

আমি আমার নিজের অ্যান্ড্রয়েড রোম তৈরি করছি। এটি তৈরি করার জন্য, আমার চালানো দরকার

mka -j8 bacon

যাইহোক, আমি এটি তৈরি করতে সময়টি পরিমাপ করতে চেয়েছিলাম, তাই আমি ব্যবহার করেছি

/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon

এটি চলবে না, কারণ এটি বলছে

/usr/bin/time: cannot run mka: No such file or directory

এই চারপাশে কাজ করতে কোনও সহায়তা, এটি প্রশংসা! আমি এক্সবুন্টু চালাচ্ছি।

সম্পাদনা:

কিছু কারণে, মেকার পরিবর্তে মেক ব্যবহার করা কাজ করে, তবে এমকিএ ব্যবহার করা আরও ভাল।

/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon

সম্পাদনা করুন 2: থেকে cyanogenmod ওয়েবসাইট

চালু করা $ source build/envsetup.shবা $ . build/envsetup.shআপনার শেল থেকে বিল্ড ডিরেক্টরিতে envsetup.sh স্ক্রিপ্টটি চালায়। envsetup.sh বিল্ড এনভায়রনমেন্টে অনেকগুলি ফাংশন যুক্ত করে, যার মধ্যে সবচেয়ে গুরুত্বপূর্ণ নীচে তালিকাবদ্ধ রয়েছে।

source build/evnsetup.shসময় নির্বাহের আগে চালিত কমান্ডটি। Evnsetup.sh দ্বারা যুক্ত করা ফাংশনগুলির মধ্যে একটি হ'ল কমান্ডের mkaমধ্যে থেকে এটি কল করা সম্ভব time?

সম্পাদনা 3: টাইপ এম কে এর আউটপুট

$ type mka
mka is a function
mka () 
{ 
    case `uname -s` in 
        Darwin)
            make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
        ;;
        *)
            schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
        ;;
    esac
}

আপনি কি এমকেএর পুরো পথটি (/ ইউএসআর / বিন / এমকে এর মতো কিছু) রাখার চেষ্টা করেছেন?
দেশগুয়া

সমস্যাটি হ'ল evnsetup.sh কিছু স্টাফ আরম্ভ করে। টার্মিনালে আমি mka কল করতে পারার আগে আমাকে সেই ফাইলটি সম্পাদন করতে হবে। স্পষ্টতই এটি টাইম কমান্ড থেকে প্যারামিটার হিসাবে কল করার সময় সনাক্ত করা যায় নি।
P1nGu1n

আমি কীভাবে এটি পুনরুত্পাদন করতে পারি?
ব্রায়াম

আপনি যখন আপনার source build/evnsetup.shকল করতে চান সেই মুহুর্তে আপনার মৃত্যুদণ্ড কার্যকর করার পরে, আপনি time mka -j8 baconকমান্ডের আউটপুট পোস্ট করতে পারেন type mka?
মাল্টে স্কোরুপা

@ মাল্টস্কোরাপ্পা আউটপুট যুক্ত হয়েছে, এমকে বাশ ফাংশন বলে মনে হচ্ছে?
পি

উত্তর:


11

সমস্যাটি হ'ল mkaআপনার স্ক্রিপ্ট দ্বারা রফতানি করা বাশ ফাংশন এবং কোনও এক্সিকিউটেবল (এর বিপরীতে make) নয়, সুতরাং /usr/bin/timeএটি খুঁজে পাওয়া যায় না, কারণ এটি কার্যকর করার মতো দেখায়।

দুই সম্ভাব্য সমাধান আছে।

প্রথমে লক্ষ করুন যে ব্যাশ অন্তর্নির্মিত ফাংশন timeএবং এক্সিকিউটেবলের মধ্যে পার্থক্য রয়েছে /usr/bin/time। এগুলি বিভিন্ন কমান্ড, যা বিভিন্ন পরামিতি নেয় এবং বিভিন্ন আউটপুট উত্পন্ন করে:

$ time sleep 1

real    0m1.001s
user    0m0.000s
sys     0m0.001s

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 664maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps

help timeঅন্তর্নির্মিত ব্যাশের জন্য সহায়তা পেতে টাইপ করুন timeman timeএক্সিকিউটেবলের জন্য সহায়তা পেতে টাইপ করুন /usr/bin/time

প্রথম সমাধানটি ব্যবহার করে time, যেখানে দ্বিতীয় সমাধান ব্যবহার করে /usr/bin/time

প্রথম সমাধান: ব্যাশ অন্তর্নির্মিত ফাংশন ব্যবহার করে time

ব্যাশ অন্তর্নির্মিত ফাংশন timeঘোষিত ব্যাশ ফাংশন সম্পর্কে সচেতন এবং আপনি এই জাতীয় ফাংশনগুলির সময় পরিমাপ করার জন্য অবিলম্বে এটি ব্যবহার করতে পারেন।

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ time foo
Hello World

real    0m1.002s
user    0m0.000s
sys     0m0.001s

আপনার ক্ষেত্রে, নিম্নলিখিত কমান্ডটি কাজ করা উচিত:

$ time mka -j8 bacon

এটি আমার পছন্দসই উপায় হবে। তবে এটি আপনার পছন্দসই আউটপুট তৈরি করতে পারে না। বিশেষত, এটি সিপিইউ ব্যবহার পরিমাপ বা মুদ্রণ করে না।

দ্বিতীয় সমাধান: এক্সিকিউটেবল ব্যবহার করে /usr/bin/time

আপনি সরাসরি বিল্ট-ইন বাশ ফাংশনের সময়টি পরিমাপ করতে পারবেন না /usr/bin/time(যতদূর আমি জানি), তবে আপনি যা করতে পারেন তা /bin/bashকার্যকর করা যায় that বাশ ফাংশনের সময় নির্ধারণ করা। এটি সামান্য হ্যাকি এবং আপনি অতিরিক্ত উদাহরণ শুরু করার সাথে সাথে এটি সামান্য ওভারহেড উত্পন্ন করে bash। গণনা করতে কয়েক মিনিট সময় লাগে এমন কোনও ফাংশনের মুখোমুখি হয়ে গেলে এই ওভারহেডটি উপেক্ষিত হতে পারে, তাই এটি আপনার প্রয়োজনের আরও ভাল অনুসারে কাজ করতে পারে।

/bin/bashব্যাশ ফাংশনে এক্সিকিউটেবল লঞ্চ করতে সক্ষম হতে , আমাদের প্রথমে ফাংশনটি রফতানি করতে হবে।

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ export -f foo
$ echo foo | /usr/bin/time /bin/bash
Hello World
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1476maxresident)k
0inputs+0outputs (0major+707minor)pagefaults 0swaps

অতএব, আপনার ক্ষেত্রে, আপনি /usr/bin/timeযে আউটপুট ফর্ম্যাটটি চান তা ব্যবহার এবং তৈরি করতে সক্ষম হতে , আপনি নিম্নলিখিত হিসাবে এগিয়ে যেতে পারেন:

$ export -f mka
$ echo 'mka -j8 bacon' | /usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" /bin/bash

আপনাকে ধন্যবাদ, আমি সত্যিই বুঝতে পারি কেন এটি কাজ করে না! দুটি সংক্ষিপ্ত প্রশ্ন, -fপ্যারামিটারটি কী করে , আমি এটি সন্ধান করতে পারিনি। দ্বিতীয়ত, / বিন / বাশ কি করে? এটা সত্যিই কৃতজ্ঞ!
পি

1
-fথেকে প্যারামিটার exportবলে exportএকটি শেল ফাংশন রপ্তানি করতে। দেখুন help export-fথেকে প্যারামিটার /usr/bin/timeবলে /usr/bin/timeএকটি ফরম্যাট স্ট্রিং আশা, কিন্তু আমি এই আপনি কি জানেন অনুমান। /bin/bashগত কমান্ডের অংশ ব্যাশ এক্সিকিউটেবল যার সঞ্চালনের সময় আসলে পরিমাপ করা হয়, যখন এটি নিজেই রপ্তানি executes হয় mkaফাংশন। এটি mkaফাংশনটি কার্যকর করে কারণ এটি mka -j8 baconস্ট্যান্ডার্ড ইনপুট থেকে কমান্ডটি পড়ে এবং কার্যকর করে , যার কারণে আমরা ব্যবহার করি echoএবং একটি পাইপ। দেরী উত্তরের জন্য দুঃখিত, শুধু এটি পড়ুন। :)
মাল্টে স্কোরুপা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.