whichнасправді це поганий спосіб робити подібні речі, оскільки він дозволяє здогадуватися про ваше оточення на основі $SHELLта файли запуску (він думає), які використовує оболонка; Мало того, що він іноді здогадується неправильно, але загалом ти не можеш сказати йому поводитись інакше. ( whichв моєму Ubuntu 10.10 не розуміє, --skip-aliasяк згадується, наприклад, @SiegeX.) 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 команда, яка повинна вести себе так, ніби вона була вбудованою (тобто вона повинна використовувати оточення оболонки, до якої викликається, включаючи локальні псевдоніми та функції), тому зазвичай це вбудована.
Він, як правило, не зустрічається в csh/ tcsh, хоча в більшості сучасних версій whichце оболонка, вбудована і робить все правильно; іноді whatзамість цього є вбудований , а іноді немає хорошого способу побачити поточне середовище оболонки з csh/ tcshвзагалі.
vimце походить , ви користуєтесьwhere vim