O link simbólico parece não existir

1

MacOS aqui, embora eu tenha 99% de certeza que esta é uma questão Unix.

Estou tentando ver exatamente onde o MySQL está instalado. Em um terminal eu entro:

which mysql

E eu recebo:

/usr/local/bin/mysql

Então, vejo o que está nesse diretório ( ls -al /usr/local/bin/mysql ) que me dá:

lrwxr-xr-x  1 myuser  admin  32 Mar 20  2017 /usr/local/bin/mysql -> ../Cellar/mysql/5.7.17/bin/mysql

Ok. Link simbólico. Então eu tento ir para aquele link simbólico via ls -al ../Cellar/mysql/5.7.17/bin/mysql ) e eu recebo:

ls: ../Cellar/mysql/5.7.17/bin/mysql: No such file or directory

Então, onde posso encontrar ../Cellar/mysql/5.7.17/bin/mysql na minha máquina?

    
por smeeb 12.01.2018 / 21:01

1 resposta

4

O link é relativo para si mesmo (não seja qual for o diretório de trabalho atual do seu processo), então lance o mysql e adicione o restante

/usr/local/bin/../Cellar/mysql/5.7.17/bin/mysql

ou em outras palavras

/usr/local/Cellar/mysql/5.7.17/bin/mysql

há uma chamada de sistema realpath(3) que pode ou não ser exposta pelo shell ou pela linguagem de programação em questão para resolvê-la sem o trabalho manual. Portabilidade sofre nestes vários comandos do shell:

$ cd /var/tmp
$ touch file
$ ln -s ../tmp/file ourlink
$ realpath ourlink                      # because I'm in mksh, YMMV
/private/var/tmp/file
$ readlink ourlink
../tmp/file
$ readlink -f ourlink
readlink: illegal option -- f
usage: readlink [-n] [file ...]
$ 

Você também pode instalar os coreutils GNU e usá-los se quiser uma interface de comando externa consistente para realpath(3) (com ainda mais complicações se quiser que o GNU readlink seja chamado readlink e apareça em PATH antes o fornecedor fornecido).

$ greadlink ourlink
../tmp/file
$ greadlink -f ourlink
/private/var/tmp/file
$ 
    
por 12.01.2018 / 21:26