这里是 MacOS,尽管我 99% 确定这是一个 Unix 问题。
我正在尝试查看 MySQL 的确切安装位置。在终端中我输入:
which mysql
我得到:
/usr/local/bin/mysql
所以我看到该目录 ( ) 中有什么内容ls -al /usr/local/bin/mysql
,它给了我:
lrwxr-xr-x 1 myuser admin 32 Mar 20 2017 /usr/local/bin/mysql -> ../Cellar/mysql/5.7.17/bin/mysql
好的。符号链接。所以我尝试通过 ) 访问该符号链接ls -al ../Cellar/mysql/5.7.17/bin/mysql
,我得到:
ls: ../Cellar/mysql/5.7.17/bin/mysql: No such file or directory
那么我../Cellar/mysql/5.7.17/bin/mysql
在我的机器上哪里可以找到呢?
答案1
链接是相对的对自己(不是你的进程的当前工作目录是什么)所以删除mysql
并添加其余部分
/usr/local/bin/../Cellar/mysql/5.7.17/bin/mysql
或者换句话说
/usr/local/Cellar/mysql/5.7.17/bin/mysql
有一个realpath(3)
系统调用可能会或可能不会被相关的 shell 或编程语言公开,以便在无需手动工作的情况下解决此类问题。这些不同的 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 ...]
$
如果您想要一致的外部命令接口,您还可以安装 GNU coreutils 并使用它们(如果您希望 GNU被调用并出现在供应商提供的命令接口之前,则realpath(3)
情况会更加复杂)。readlink
readlink
PATH
$ greadlink ourlink
../tmp/file
$ greadlink -f ourlink
/private/var/tmp/file
$