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