2010-08-26 84 views
0

使用Bash脚本,是否有办法确定链接指向哪个目录,然后根据结果将其切换到另一个目录?如何确定链接指向哪个目录使用bash

例如,说我有两个以下目录:

/var/data/1//var/data/2/

我有一个链接到他们中的一个,比方说,data_link它目前连结/var/data/1/

当脚本被触发,我希望它将链接交换到/var/data/2/(即ln -s /var/data/2/ /somepath/data_link)。

当脚本再次触发时,会发生相反的情况(即ln -s /var/data/1/ /somepath/data_link)等等。什么是通过Bash脚本执行此操作的最简单方法?

回答

1

使用readlink命令来获得一个链接的内容:

$TARGET=$(readlink "$LINK") 

然后使用标准if检查当前值,rm将其删除,并ln你表示与新重新创建期望的目标。

+1

请注意'readlink'实用程序是非标准的。 – 2010-08-26 18:27:18

4

不幸的是,unix实用程序的标准集不包含对readlink系统调用的简单访问。某些系统包含readlink命令。如果可用,那么readlink foo很有可能打印符号链接foo的目标。如果您觉得使用选项很有诱惑力,请注意,此命令有多个版本可以浮动;即使在Linux发行版之间,您也不会获得可移植性。

如果您有perl可用,perl -e 'print readlink $ARGV[0]' mylink将打印mylink的目标。

如果您需要一种可移植的方式,并且没有Perl或其他任何理智的东西,那么您也许可以分析ls -l mylink的输出。

如果您有一个有权修改的目录的符号链接,那么$(cd mylink && command -p pwd)是链接最终目标的绝对路径。例如,如果foo/var/tmp/bar的符号链接,bar/var/tmp中的目录,并且/var/tmp是到/tmp的符号链接,则此命令将生成/tmp/bar

相关问题