O realpath
utilitário de comando agora é definido pelo POSIX em sua edição 8 (2024): realpath — resolver um nome de caminho
realpath [-E|-e] arquivo
O utilitário realpath deve canonizar o nome do caminho especificado pelo operando do arquivo da seguinte forma:
Se uma chamada para a
realpath()
função com o caminho especificado como seu primeiro argumento for bem-sucedida, o caminho canonizado deverá ser o caminho que seria retornado por essarealpath()
chamada. Caso contrário:
Se a opção -e for especificada, a canonização falhará.
Se a opção -E for especificada, então se uma chamada para a
realpath()
função com o caminho especificado como seu primeiro argumento encontrar uma condição de erro diferente de [ENOENT], a canonização falhará; se a chamada encontrar um erro [ENOENT], o realpath expandirá todos os links simbólicos que seriam encontrados em uma tentativa de resolver o caminho especificado usando o algoritmo especificado em XBD 4.16 Pathname Resolution, exceto que quaisquer<slash>
caracteres finais que não sejam também<slash>
caracteres iniciais serão ignorados. Se essa expansão for bem-sucedida e o prefixo do caminho do caminho expandido for resolvido para um diretório existente, o caminho canonizado será o caminho expandido. Em todos os outros casos, a canonização falhará. Se o caminho expandido não estiver vazio, não começar com um<slash>
e tiver exatamente um componente de caminho, ele será tratado como se tivesse um prefixo de caminho de "./
".Se nenhuma opção for especificada, o realpath canonizará o caminho especificado de uma maneira não especificada, de modo que o caminho absoluto resultante não contenha nenhum componente que faça referência a arquivos do tipo link simbólico e não contenha nenhum componente que seja ponto ou ponto-ponto.
Após a canonização bem-sucedida, o realpath gravará o nome do caminho canonizado, seguido por um
<newline>
caractere, na saída padrão.Se a canonização falhar ou o caminho canonizado estiver vazio, nada será gravado na saída padrão, uma mensagem de diagnóstico será gravada no erro padrão e o realpath sairá com status diferente de zero.
[...]
Minha pergunta é: a -e
opção de realpath
já é suportada pelo menos por GNU e Solaris, mas não consigo encontrar nenhuma menção à -E
opção em nenhuma realpath
que eu pudesse verificar (macOS, FreeBSD, Solaris, GNU). O OpenGroup a inventou?
Na verdade, é uma invenção do POSIX, adicionada para reconciliar comportamentos incompatíveis em diferentes implementações: o coreutils
realpath
não exige que o arquivo exista, a menos que-e
seja especificado, enquanto o NetBSDrealpath
exige que o arquivo exista.Para resolver isso, a
-E
opção foi inventada; ela foi implementada no NetBSDrealpath
:(Veja a alteração correspondente para mais detalhes.)
A
-E
opção aparece pela primeira vez nesta pergunta :e com os possíveis caminhos a seguir descritos a seguir :
Você pode ver o histórico da entrada POSIX na edição 1457 do Austin Group .