Respostas:
Somente um shell embutido dirá a alguém corretamente o que o shell fará por um determinado nome de comando, uma vez que somente os embutidos podem saber completamente sobre aliases, funções do shell, outros embutidos e assim por diante. Lembre-se: nem todos os comandos correspondem aos arquivos executáveis em primeiro lugar.
Para o shell Bourne Again bash, o built-in é o typecomando:
$ type '['
[ is a shell builtin
Para a concha de peixefishtype ,, O builtin funciona da mesma forma que o bash. Para obter apenas o caminho de um executável, use command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Para a Shell Korn, ksh, o built-in é o whencecomando - com typecriado inicialmente como um apelido comum para whence -ve do commandbuilt-in com a -vopção equivalente a whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Para a Z Shell, zsh, o built-in é o whencecomando, com o commandbuilt-in com a -vopção equivalente ao whencee as built-ins type, whiche whereequivalente a whencecom as opções -v, -ce, -carespectivamente.
$ whence ls
/bin/ls
Para a Shell TC, tcsh, o built-in é o whichcomando - para não ser confundido com qualquer comando externo por esse nome:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typetambém está embutido no zsh?
which-2.19-6.el6.x86_64) coloca um arquivo de inicialização /etc/profile.d/which2.sh. Isso é lido por shells não-csh, incluindo zsh. Alias whichpara si mesmo. Portanto, para usuários do zsh, em particular, ele substitui as quebras internas which.
Você pode usar whichpara isso:
aix@aix:~$ which ls
/bin/ls
Ele funciona pesquisando os PATHarquivos executáveis que correspondem aos nomes dos argumentos. Observe que isto não funciona com aliases de shell:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
type, no entanto, funciona:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichnão é necessariamente suficiente por si só. Ele retorna apenas o primeiro nome encontrado em $ PATH ... Esse nome pode ser um link simbólico, e não o executável final de cadeia .
whichse não (necessariamente) voltar o arquivo executável. Ele retorna o primeiro nome de arquivo correspondente encontrado em $ PATH (ou vários arquivos nomeados semelhantes ao usar which -a) ... O executável real pode estar a vários links de distância.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' O comando que encontra o real executável é readlink -e,
(em conjugação com o which)
readlink -e $(which locate)/usr/bin/mlocate Para ver todos os links intermediários :
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate
Podes tentar:
whereis ls
Isso me dá:
ls: /bin/ls /usr/share/man/man1/ls.1.gz