Isso pode não ser o que você quer ouvir, mas eu diria que a ideia de um caminho canônico para um arquivo é falha.
Primeiro, se você criar um link físico para um arquivo existente, agora existem literalmente dois caminhos distintos para o mesmo arquivo:
$ cd "$(mktemp --directory)"
$ touch foo
$ ln foo bar
$ ls --inode
1223418 bar 1223418 foo
Não há "original" entre esses dois e eles mantêm os mesmos metadados, exceto pelo nome:
$ touch --date='2001-02-03 04:05:06.789' bar
$ ls -lA
total 0
[…] Feb 3 2001 bar
[…] Feb 3 2001 foo
Em segundo lugar, há muitas maneiras de se referir a um arquivo, dependendo do contexto:
- Caminhos relativos a um link físico ou simbólico
- Caminhos absolutos (vários, como visto acima) para um link rígido ou simbólico
- file: /// absolute / path / to / file ou outros protocolos
Todos são úteis em diferentes contextos.
Em terceiro lugar, Bash não está "fingindo" nada ; não há ilusão, você realmente está nesse diretório. O fato de ser um link simbólico deve ser transparente para quase todas as ações que você faria com ele.
Quarto, os links simbólicos não têm nada a ver com o Bash ; eles são um recurso do sistema de arquivos, não relacionados a nenhum shell, terminal ou mesmo sistema operacional. E todos os principais sistemas de arquivos os têm, então, tentar ignorá-los provavelmente vai atrapalhar em vez de ajudá-lo.
Finalmente, qualquer ferramenta que trate links simbólicos especialmente sem ser explicitamente instruída a fazê-lo deve ser corrigida, porque tem um bug .