realpath (GNU coreutils 8.22) resolve “.” symlink independentemente de “-s”

1

Estou tentando usar o realpath em um script que precisa Certifique-se de que ele esteja localizado em um determinado caminho (possivelmente encadeado por links simbólicos). Além disso, o script deve ser executado em qualquer local, portanto, não se pode presumir que o diretório atual seja o que contém o script. Mas ...

$ mkdir dir
$ touch dir/script
$ ln -s dir symlink
$ realpath -s symlink/script
/tmp/symlink/script
$ realpath -s symlink       
/tmp/symlink

Tudo está bem por agora: realpath resolveria o symlink por padrão, mas o -s fez exatamente o que precisávamos.

$ cd symlink 
$ realpath -s script 
/tmp/dir/script
$ realpath -s .
/tmp/dir

Por que resultado é o mesmo que sem -s neste caso? Mesmo que se suponha que a resolução do symlink funcione de uma maneira especial para o diretório atual, aqui está a inconsistência de qualquer maneira:

$ realpath -s ../symlink/script 
/tmp/symlink/script
    
por zag 26.06.2014 / 22:14

1 resposta

0

A página man de realpath diz:

realpath -s filename

When the -s option is used realpath only removes the . and .. directories, but not symbolic links from filename. If the given filename argument is relative (i.e. does not start with '/'), realpath -s prepends to it the current directory name as obtained from the getcwd(2) system call before further processing.

Como você chama realpath -s script e script não é um link simbólico, o caminho real pré-acrescenta apenas o diretório de trabalho atual conforme fornecido por pwd .

No entanto, parece que o comportamento do realpath depende do resp. a implementação de getcwd (); sob cygwin realpath -s script mostra um caminho absoluto.

Você pode obter um caminho absoluto, por exemplo com

realpath -s $(pwd -P)/script

como pwd -P imprime o nome do arquivo completo do diretório de trabalho atual, evitando todos os links simbólicos.

Ou use

readlink -e script

onde -e é para "canonicalizing seguindo cada link simbólico em todos os componentes do nome dado recursivamente".

    
por 26.06.2014 / 22:59