কোনও এলিয়াসেড কমান্ডে কীভাবে ব্যবহার করবেন?


76

বেশিরভাগ ব্যবহারকারীর মতো, আমার কাছে প্রায়শই ব্যবহৃত প্রোগ্রামগুলির জন্য পতাকাগুলির একটি ডিফল্ট সেট দেওয়ার জন্য প্রচুর উপকরণ সেট করা আছে। এই ক্ষেত্রে,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'

সমস্যাটি হ'ল আমি যদি whichআমার vim/ grep/ ls/ ইত্যাদি কোথা থেকে আসছি তা ব্যবহার করতে চাই , তবে উলামের পথে চলে আসে:

$ which vim
vim: aliased to vim -X

এটি দরকারী আউটপুট, তবে এই ক্ষেত্রে আমি যা খুঁজছি তা নয়; আমি জানি যে vimপ্রবণতা আছে vim -Xতবে আমি জানতে চাই যে vim এটি কোথা থেকে আসছে।

অস্থায়ীভাবে উপনামটিকে সংজ্ঞায়িত করার সংক্ষিপ্তভাবে কেবলমাত্র আমি এটি ব্যবহার whichকরতে পারি, whichওরফে 'আনপ্রেপ' করার এবং কীভাবে নিজে চালানোর কোনও সহজ উপায় আছে ?

সম্পাদনা: দেখে মনে হচ্ছে এটি whichবিভিন্ন শেল জুড়ে বিভিন্ন আচরণ সহ একটি শেল-বিল্টিন। বাশে, সিজেএক্সের --skip-aliasপতাকাটির পরামর্শ কার্যকর করেছে; তবে আমি Zsh এ আছি অনুরূপ কিছু আছে কি সেখানে?


জেডএস-এ, আপনি যদি জানতে চান যে vimএটি কোথা থেকে আসছে তবে আপনি ব্যবহার করতে পারবেনwhere vim
মতিজা নালিস

উত্তর:


105

whichএটি বাস্তবে এটি করার একটি খারাপ উপায়, কারণ এটি আপনার পরিবেশের উপর ভিত্তি করে $SHELLএবং স্টার্টআপ ফাইলগুলি (এটি মনে করে) যে শেলটি ব্যবহার করে তা অনুমান করে ; এটি কেবল কখনও কখনও ভুল অনুমানও করে না, তবে আপনি সাধারণত এটি অন্যরকম আচরণ করতে বলতে পারেন না। ( whichআমার উবুন্টু ১০.১০ তে --skip-aliasউদাহরণস্বরূপ @ সিজেএক্সএল হিসাবে বোঝা যায় না ) typeআপনার কনফিগারেশন ফাইলগুলিতে পোকার পরিবর্তে বর্তমান শেল পরিবেশ ব্যবহার করে এবং সেই পরিবেশের কিছু অংশ উপেক্ষা করতে বলা যেতে পারে, সুতরাং এটি আপনাকে দেখায় আসলে কী হবে আপনার ডিফল্ট শেলটির পুনর্নির্মাণে যা ঘটেছিল তার পরিবর্তে ঘটবে।

এই ক্ষেত্রে, type -Pকোনো ডাকনাম বা ফাংশন বাইপাস করবে:

$ type -P vim
/usr/bin/vim

আপনি একবারে একবারে সমস্ত স্তরগুলি ছাঁটাই করতে এবং এটি কী খুঁজে পেতে পারে তা আপনাকে দেখাতে বলতে পারেন:

$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim

(মন্তব্যগুলি থেকে এ সম্পর্কে বিস্তৃত :)

সমস্যাটি whichহ'ল এটি সাধারণত শেল বিল্ট ইন-এর পরিবর্তে একটি বাহ্যিক প্রোগ্রাম, যার অর্থ এটি আপনার এলিয়াসগুলি বা ফাংশনগুলি দেখতে পারে না এবং শেলের প্রারম্ভকরণ / কনফিগারেশন ফাইলগুলি থেকে তাদের পুনর্গঠন করার চেষ্টা করতে হবে। (যদি এটি শেলটি অন্তর্নির্মিত থাকে zshতবে এটি যেমন রয়েছে তবে দৃশ্যত তা না থাকলে bashশেলের পরিবেশ ব্যবহার এবং সঠিক কাজটি করার সম্ভাবনা বেশি থাকে))

typeএকটি POSIX-অনুবর্তী কমান্ড যা আচরণ করে যেমন যদি এটা ছিল প্রয়োজন বোধ করা হয় একটি বিল্ট-ইন (যেমন, এটা শেল স্থানীয় alias লেখা এবং ফাংশন অন্তর্ভুক্ত করা থেকে প্রার্থনা সে সম্পর্কে এনভায়রনমেন্ট ব্যবহার আবশ্যক), তাই এটি সাধারণত হয় একটি বিল্ট-ইন।

এটি সাধারণত csh/ এ পাওয়া যায় নি tcsh, যদিও এর বেশিরভাগ আধুনিক সংস্করণগুলিতে whichএকটি শেল বিল্টিন এবং সঠিক কাজ করে; কখনও কখনও অন্তর্নির্মিত whatপরিবর্তে হয়, এবং কখনও কখনও csh/ থেকে এখানের শেলের পরিবেশ দেখার কোনও ভাল উপায় নেই tcsh


6
ধন্যবাদ! এটি আমার ব্যাগের কৌশলগুলিতে যুক্ত করতে খুব দরকারী। আমি বিশেষত পছন্দ করি যে এটি কেবল প্রথমটি নয়, সমস্ত ক্ষেত্রে আপনার type -aকাছে ফিরে আসে । আমি ওরফে করব করার :)$PATHwhichtype
আদ্রিয়ান Petrescu

2
@ গাইকোসর: ধন্যবাদ যদি typeপসিক্স স্ট্যান্ডার্ডের অংশ হয় তবে সেটাই উপায়। আমার প্রশ্নের উত্তর দিতে, টাইপ করুন zsh এও (ডেবিয়ানে)। কেন বিতরণগুলি পরিত্রাণ পাবে না whatএবং whichযদি তাদের মানক না করা হয় এবং অতিরিক্ত কার্যকারিতা না থাকে?
ফাহিম মিঠা 21

1
না, দূর থেকেও নয়।
গাইকোসর 21

1
@ ফাহিম: পুনরায় নথিপত্র, আমি info bash 'Bash builtins'লিনাক্স দিয়ে শুরু করব , যদিও আপনি এটি zshরেফারেন্স ম্যানুয়ালটিও পেতে পারেন । আরো আনুষ্ঠানিকভাবে pubs.opengroup.org/onlinepubs/009695399/utilities/type.html (যা আমি নোট আসলে বৈশিষ্ট না -Pবা -a, অথবা এমনকি -pযার মূল ফর্ম ছিল -P, কিন্তু যে এটি সাম্প্রতিক শেল এনভায়রনমেন্ট ব্যবহার প্রয়োজন না)।
গাইকোসর 21

2
type -pzsh এবং ব্যাশের মধ্যে আলাদা আচরণ করে। type -Pzsh এ মোটেই অস্তিত্ব নেই।
কোজিরো

15

ইন bash:

type -P vim

ইন zsh:

type -p vim

প্রত্যেকে:

/usr/bin/which vim

বা:

( unalias vim; type vim )

2
শেষ এক শান্ত। এটি করার জন্য আমাদের একটি নাম থাকতে পারে। :)
বালকি

রেডহ্যাটে ব্যাশে আমাকে টাইপ-পি ব্যবহার করতে হবে, এবং কোনটি নয়, যদি আমি সঠিক উত্তর চাই want কোনও এলিয়াস বা ফাংশন উদ্বিগ্ন নয়।

ডাঃ ইভাল, কোন "কোন"? কোন রেড হাট?
মাইকেল

@ মাইকেল আরএইচ 7.4। জিএনইউ যা v2.20।

4

whichএই কমান্ড রিপোর্ট হিসাবে zsh একটি বিল্টিন রয়েছে:

$ whence -w which
which: builtin

বাহ্যিক কমান্ড কার্যকর করতে (যে কোনও শেলের মধ্যে) which, পুরো পাথটি ব্যবহার করুন :

$ /bin/which ls; echo $?
/bin/ls
0

সুতরাং কমান্ডটি lsপাওয়া গেল (0 এর প্রস্থান মূল্য), এবং এটিতে অবস্থিত /bin/ls

ভিতরে zsh; বাহ্যিক আদেশগুলি সন্ধানের জন্য একটি উপায় (উপরে একটির পাশে) হ'ল:

$ whence -p ls
/bin/ls

যাইহোক, এটি নেস্টেড এলিয়াসগুলি যেমন সমাধান করবে না:

$ alias dire='ls -l'

কমান্ডটি জানিয়েছে যে কোনও direআদেশ পাওয়া যায় নি।

$ whence -p dire; echo $?
1

নেস্টেড এলিয়াসগুলি সমাধান করার জন্য (ম্যানুয়ালি) দেখুন Resolve nested aliases to their source commands


2

খনি যেমন সংজ্ঞায়িত

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

1

নিম্নলিখিত চেষ্টা করুন:

which --skip-alias vim

1
মজাদার! এটি বাশকে নিয়ে কাজ করে, তবে জ্যাশ-তে নয় (আমি সত্যিই ভাবিনি যে এটি শেল-নির্ভর হয়ে উঠবে)। এটি আমাকে বুঝতে পেরেছিল যে whichপ্রকৃতপক্ষে একটি শেলটি অন্তর্নির্মিত এবং নিয়মিত ইউনিক্স ইউটিলিটি নয় যা আমি ধরে নিয়েছিলাম। সুতরাং আমার উচিত আমার প্রশ্নটি সম্পাদনা করা এবং Zsh নির্দিষ্ট করা উচিত। আমাকে এটি নির্দেশ করার জন্য ধন্যবাদ!
অ্যাড্রিয়ান পেট্রেস্কু

whichঅন্তর্নির্মিত না, কমপক্ষে ডেবিয়ানের উপর নয়। এটি শেল স্ক্রিপ্ট, এবং ডিবিয়ান্টিলগুলির অংশ, তাই zsh এ কাজ করে। তবে, দেবিয়ান --skip-aliasবিকল্প নয় whichwhichচারপাশে ভাসমান বিভিন্ন জাত আছে ? এটি স্ট্যান্ডার্ডাইজড কমান্ড হতে পারে না।
ফাহিম মিঠা 21 '

@ ফাহিম মিঠা: এটি একটি জেডএস বিল্টিন। দেখুন man zshbuiltinsযা [-wpams] নাম ... কোথা থেকে সমান -c।
মাইকেল

হ্যাঁ জুবুন্টুর বিষয়ে bash, এটি কোনও অন্তর্নির্মিত নয় এবং এর --skip-aliasবিকল্প নেই।
পলিম

সেন্টোস (এবং আরএইচইল?) 6 এ এটি একটি এক্সিকিউটেবল /usr/bin/whichপ্লাস এবং একটি উপাধ /etc/profile.dযা এটি উপাধিগুলি পরিচালনা করতে দেয় তবে --skip-aliasকাজ করে। ফলস্বরূপ which whichউপনামটি command which whichদেখায় , তবে কার্যকর হয়!
dave_thompson_085


0

উভয় typeএবং whichআপনার শেল টাইপ অনুযায়ী পৃথক আচরণ।

ব্যাশে, whichএকটি কমান্ড বিদ্যমান PATH। এটি আপনার সরবরাহিত আদেশটি সন্ধান করে PATH। বাশ বিল্টিন type -P(পি ফর PATH) ঠিক এর মতো আচরণ করে which

জেডএসএইচে , উভয়ই whichএবং typeবিল্টইনগুলি এবং বিল্টিনের আংশিক ফাংশন whencewhich -pআপনি কি চান এটি একটি পাথ অনুসন্ধানে বাধ্য করে। ( জেডএসএইচের -Pজন্য বিকল্প উপলব্ধ নেই type))

কোথা থেকে [-vcwfpamsS] [-x নাম্বার] নাম ...

-p

নামের জন্য একটি পাথ অনুসন্ধান করুন এমনকি এটি একটি উপনাম, সংরক্ষিত শব্দ, শেল ফাংশন বা অন্তর্নির্মিত হলেও।

জেডএসএইচ ম্যানুয়াল থেকে আরও।

যা [-wpamsS] [-x সংখ্যা] নাম ...

সমান কোথা থেকে-সি।

জেডএসএইচ থেকে builtin whichকমান্ড ব্যবহার এড়িয়ে যেতে এবং বাধ্য করতে :whichPATH

alias which="command which"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.