which
é, na verdade, uma maneira ruim de fazer coisas como essa, pois faz suposições sobre seu ambiente com base em $SHELL
e nos arquivos de inicialização (que ele acha) que o shell usa; não só às vezes adivinha errado, mas geralmente não é possível dizer que ele se comporta de maneira diferente. ( which
no meu Ubuntu 10.10 não entende --skip-alias
como mencionado pelo @SiegeX, por exemplo). type
usa o ambiente shell atual em vez de cutucar seus arquivos de configuração, e pode ser instruído a ignorar partes daquele ambiente, para mostrar o que realmente acontecerá em vez do que aconteceria em uma reconstrução do seu shell padrão.
Nesse caso, type -P
ignorará os aliases ou funções:
$ type -P vim
/usr/bin/vim
Você também pode pedir para remover todas as camadas, uma de cada vez, e mostrar o que ela encontraria:
$ type -a vim
vim is aliased to 'vim -X'
vim is /usr/bin/vim
(Expandindo isso a partir dos comentários:)
O problema com which
é que geralmente é um programa externo em vez de um shell embutido, o que significa que ele não pode ver seus aliases ou funções e precisa tentar reconstruí-los a partir dos arquivos startup / config do shell. (Se é um shell embutido, como é em zsh
, mas aparentemente não em bash
, é mais provável usar o ambiente do shell e fazer a coisa certa.)
type
é um comando compatível com POSIX que é necessário para se comportar como se fosse um built-in (ou seja, deve usar o ambiente do shell é invocado de incluindo aliases locais e funções), por isso normalmente é um built-in.
Geralmente não é encontrado em csh
/ tcsh
, embora na maioria das versões modernas desses which
seja um shell embutido e faça a coisa certa; às vezes o built-in é what
, e às vezes não há uma boa maneira de ver o ambiente atual do shell a partir de csh
/ tcsh
.