Use casos de readlink -f vs. readlink -e

6

Eu usei readlink -f e readlink -e em várias ocasiões para resolver links simbólicos e, tanto quanto me lembro, eles fornecem os mesmos resultados. A man page para readlink de man readlink diz:

-f, --canonicalize
       canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

-e, --canonicalize-existing
       canonicalize by following every symlink in every component of the given name recursively, all components must exist

Depois de ler a man page, embora eu entenda as diferenças técnicas entre as opções -f e -e , não consigo pensar em situações específicas em que eu usaria uma dessas opções. Há casos e circunstâncias de uso específicos em que um pode preferir usar readlink -f a readlink -e e vice-versa?

    
por edwinksl 27.08.2016 / 23:27

1 resposta

7

Em primeiro lugar, os dois canonizam os nomes dos arquivos que incluem:

  • Convertendo todos os caminhos relativos para caminhos absolutos

  • Convertendo todos os links simbólicos para caminhos reais com hardlink na hierarquia do sistema de arquivos

As principais diferenças são:

  • -f canonicalizará um caminho que pode conter uma parte do sistema de arquivos inexistente apenas por último, por ex. um diretório ou um arquivo, status de saída diferente de zero, caso contrário; por outro lado, -e só funcionará se todos os componentes existirem no sistema de arquivos, status de saída diferente de zero, caso contrário

  • Qualquer / à direita será ignorado em -f , -e tratará / como um diretório

Então, praticamente:

  • Use -e quando quiser ter certeza de que algum caminho deve existir, por exemplo, você precisa do status de saída para fazer qualquer outra operação lógica, um if - else teste precisamente

  • Use -f quando você não quiser que o caminho exista estritamente agora, mas você precisará do caminho completo mais tarde. você deseja criar o arquivo resolvido posteriormente quando um processo estiver em execução ou um sistema de arquivos estiver montado e assim por diante.

  • Use -e com um / à direita para verificar explicitamente uma entrada de diretório, pois -f ignora o /

por heemayl 28.08.2016 / 00:13