\ \ সময় `,` t \ ime `এবং` \ সিডি` আসলে কী করে? (শাঁস মধ্যে ব্যাকস্ল্যাশ সঙ্গে মজা)


9

/usr/bin/timeশেল (বাশ এবং জেডএস) অন্তর্নির্মিত মধ্যে পার্থক্য নিয়ে আলোচনা করার সময় time, কেউ উল্লেখ করেছেন যে কেউ \timeএকটি শর্টহ্যান্ড হিসাবে ব্যবহার করতে পারে /usr/bin/time

প্রথমে এটি একটি দুর্দান্ত নিষ্পাপ শর্টকাটের মতো মনে হয়েছিল, তবে তারপরে কিছু প্রশ্ন উঠেছিল:

  • কেন t\imeকাজ করে?
  • ডিরেক্টরিটি কেন \cdপরিবর্তন করে, যদিও /usr/bin/cd¹ না করে?

সুতরাং স্পষ্টতই, \fooসমতুল্য নয় $(which foo)। প্রশ্নটি এখন:

\fooবাশ এবং zsh উভয়ের পর্যবেক্ষণের আচরণটি কোনও শেলের POSIX সংজ্ঞা দ্বারা কোনওভাবে আবৃত হয় এবং যদি তাই হয় তবে কেন এটি এর মতো আচরণ করে?


পাদটীকা 1: /usr/bin/cdহ'ল আমার সিস্টেমে,

#!/bin/sh
builtin cd "$@"

এছাড়াও unix.stackexchange.com/questions/12762/… দেখুন নোট করুন \ কমান্ডটি বিশেষভাবে tcsh কার্যকারিতা ডকুমেন্টেড যা কমান্ডের জন্য উপকরণ উপেক্ষা করতে বলেছে।
সিম্পুজার

উত্তর:


14

t\imeবা \cd(বা "tim"eবা 'cd'বা ${-##*}timeবা ${-+time}এবং উদ্ধৃতি এবং বিস্তারের প্রতিটি অন্যান্য সংমিশ্রণ যা আপনি অবশেষে সমাধান করতে পারেন timeবা cd), এটি হ'ল: লেখার অন্য উপায় cdএবং time

যাইহোক, এটি শেষ পর্যন্ত শেল সিনট্যাক্স পার্সিং এবং ব্যাখ্যার পরে cdবা timeপরে সমাধান করবে । বিশেষত, এটি শেল কীওয়ার্ডের স্বীকৃতি এবং ওরফে প্রতিস্থাপনের অনেক পরে ঘটে ।

সুতরাং, যে সময় শেলটি তার ভাষার কীওয়ার্ড সন্ধান করছে, এটি শেল কীওয়ার্ড ti\meহিসাবে স্বীকৃতি timeপাচ্ছে না । সুতরাং একটি:

ti\me echo test

শেল timeদ্বারা একটি সাধারণ কমান্ড অনুসারে কীওয়ার্ডের বিপরীতে সাধারণ কমান্ড হিসাবে স্বীকৃত হবে ।

তারপরে উদ্ধৃতিটি ti\meপ্রক্রিয়া করা হবে (এখানে যে ব্যাকস্ল্যাশ mঅক্ষরটি উদ্ধৃত করছে যা কোনওভাবেই উদ্ধৃতি দেওয়ার দরকার নেই , উদ্ধৃতিচিহ্ন মুছে ফেলা হয়েছে, আপনি পেয়েছেন time) এবং একটি time কমান্ড অন্য কমান্ডের মতো দেখাবে (বিল্টিনের তালিকায়) , ফাংশন এবং এক্সিকিউটেবল ফাইলগুলিতে $PATHMost সম্ভবত এটি /bin/timeএখানেই থাকবে)

কারণ cd, cdশেল ভাষার কোনও কীওয়ার্ড নেই , কেবল একটি cdবিল্টিন কমান্ড (যা আপনার চেয়ে অগ্রাধিকার নেয় /usr/bin/cd)। তবে, যদি আপনি cd(যেমন alias cd=pushd) এর জন্য একটি এলিফ নির্ধারণ করেন তবে আবার একই করুন same যেমন উরফের প্রতিস্থাপনটি খুব তাড়াতাড়ি সম্পন্ন করা হয়, কোট অপসারণের আগে, যদি আপনার কোনও একটি নাম রয়েছে cdএবং তার জন্য একটি নাও রয়েছে \cd(নোট করুন যে অনেকগুলি শেল তাদের মধ্যে ব্যাকস্ল্যাশ সহ এলিয়াসের অনুমতি দেয় না), তবে লিখে:

\cd dir

আপনি নিশ্চিত cdহচ্ছেন যে আপনার উপনামটি প্রতিস্থাপিত নয়।

সংক্ষেপে, কমান্ড নাম অথবা এর কোন অংশ উদ্ধৃত একটি শেল শব্দ হিসেবে দেখা হচ্ছে থেকে এটা রোধ করে (কীওয়ার্ড হচ্ছে জিনিষ পছন্দ while, for, if, {... timeকোন কিওয়ার্ড হল কিছু শুধুমাত্র শাঁস), এবং রোধ করা যাবে উপনাম আপনি এটি জন্য থাকতে পারে ।

তবে এই আদেশটি কোনও এক্সিকিউটেবল ফাইলের সমাধানের জন্য জোর করে না $PATH, কমান্ডটি এখনও ফাংশনগুলির মধ্যে প্রথমে অনুসন্ধান করা হয় (যা আপনি কাজ করে ঘিরে কাজ করতে পারেন command time cmd...) এবং বিল্টিনগুলি (যা করে আপনি চারপাশে কাজ করতে পারেন env time cmd..., যদিও আমি জানি না) একটি শেল যা একটি বিল্টিন timeকমান্ড রয়েছে)।

নোট করুন যে কিছু শাঁসে typeset/ declare/ export/ local... পরিবারের বিশেষ বিল্টিনদের আচরণেও উদ্ধৃতিটির প্রভাব থাকতে পারে । স্থানীয় ভেরিয়েবল অ্যাসাইনমেন্টের জন্য কোটগুলি দরকার কি দেখুন ? বিস্তারিত জানার জন্য.


সুতরাং, এর মধ্যে পার্থক্য timeএবং cdযা পর্যবেক্ষণের আচরণের পার্থক্যের দিকে পরিচালিত করে তা timeহ'ল কীওয়ার্ড এবং cdএকটি বিল্টিন কমান্ড ?
জোনাস শোফার

1
@ জোনাস উইলিকি, এটি timeএকটি কীওয়ার্ড এবং এটি cdনয়। (এবং যদি আপনার জন্য cdবা একটি উপনাম থাকে timeতবে এটি অন্য বিষয় হবে)। যে cdbuiltin কি না (উদ্ধৃত সংশ্লিষ্ট হয় প্রভাবে যতদূর) এই সময়ে কোন ঘটনা আছে। কিছু শেলের অবশ্য কয়েকটি বিল্টইন রয়েছে যা কীওয়ার্ড এবং বিল্টিনের মাঝামাঝি হয়ে থাকে কারণ অন্যান্য বিল্টিন থেকে পৃথকভাবে তাদের পার্সিং করা হয়। এটা export/ typeset/ এর ক্ষেত্রে declare। আমি সম্ভবত এই উত্তরে এটি সম্পর্কে কিছু নোট যোগ করা উচিত।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.