O Bash tem o comando interno "type", que indica como cada argumento seria interpretado se usado como um nome de comando, por exemplo:
$ type myfunction
myfunction is a function
myfunction ()
{
echo hello
}
$ type myfunctionalias
myfunctionalias is aliased to `myfunction'
$ type python
python is /usr/bin/python
No último caso, /usr/bin/python é um link, e seu alvo é novamente um link:
$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Feb 5 09:05 /usr/bin/python -> python3
$ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 7 Feb 5 09:05 /usr/bin/python -> python3.13
$ ls -l /usr/bin/python3.13
-rwxr-xr-x 1 root root 14352 Feb 5 09:05 /usr/bin/python3.13
É possível resolver um link com "readlink -f", porém é tedioso fazê-lo manualmente, pois requer até três etapas: type para resolver a origem do alias, type para resolver o destino do alias e readlink para resolver qualquer link.
Na prática, estou mais interessado no que realmente será executado, em vez de etapas de resolução únicas. Então, preciso de uma ferramenta do tipo "tipo" que resolva os aliases e os links, idealmente:
$ clevertype python
/usr/bin/python3.13
$ clevertype --verbose python
python is /usr/bin/python
/usr/bin/python links to /usr/bin/python3
/usr/bin/python3 links to /usr/bin/python3.13
Result: python resolves to /usr/bin/python3.13
E:
$ clevertype pythonalias
pythonalias resolves to /usr/bin/python3.13
$ clevertype --verbose pythonalias
pythonalias is aliased to `/usr/bin/python'
/usr/bin/python links to /usr/bin/python3
/usr/bin/python3 links to /usr/bin/python3.13
Result: pythonalias resolves to /usr/bin/python3.13
Existe tal ferramenta?