检查目录(符号链接)是否仍指向同一位置

时间:2012-05-18 10:39:57

标签: linux bash shell unix

我负责一个脚本,每个版本都会复制到一个发布文件夹,例如release/version_0.0.2。我还为此版本(文件夹release/version_0.0.2)设置了一个名为latest的符号链接。要运行脚本,您必须位于脚本所在的文件夹中(使用相对路径的错误设计决策)。

我的问题是这个脚本的用户几乎一直都想使用最新版本。因此,他们将latest设置为工作目录并从中运行脚本。但是当我发布一个新版本时,他们会自动使用旧版本,所以想要用户(用bash编写)询问用户他/她是否想要使用旧版本。

我的想法是检查脚本是否从latest运行,但是当我更改符号链接时,$ PWD在运行脚本时更改,但不在shell中。

这是一个例子:

selnx183:~> cd latest/
selnx183:~/latest> echo $PWD
/home/ejohael/latest
selnx183:~/latest> ps
  PID TTY          TIME CMD
11082 pts/190  00:00:00 tcsh
32527 pts/190  00:00:00 ps
selnx183:~/latest> pwdx 11082
11082: /home/ejohael/release/version_0.0.2
selnx183:~/latest> ./test 
-------------------------------------------------------------------
/home/ejohael/latest
/home/ejohael/latest
/home/ejohael/latest
/home/ejohael/release/version_0.0.2
~/latest

-------------------------------------------------------------------
/home/ejohael/latest
selnx183:~/latest> rm ~/latest
selnx183:~/latest> ln -s ~/release/version_0.0.3/ ~/latest
selnx183:~/latest> echo $PWD
/home/ejohael/latest
selnx183:~/latest> ps
  PID TTY          TIME CMD
11082 pts/190  00:00:00 tcsh
32727 pts/190  00:00:00 ps
selnx183:~/latest> pwdx 11082
11082: /home/ejohael/release/version_0.0.2
selnx183:~/latest> ./test 
-------------------------------------------------------------------
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
/home/ejohael/release/version_0.0.2
~/release/version_0.0.2

-------------------------------------------------------------------
/home/ejohael/release/version_0.0.2
selnx183:~/latest>

测试结果如下:

#!/bin/bash

echo `env` > log

echo "-------------------------------------------------------------------"

echo $PWD
echo `pwd`
echo `cd -L . ; pwd`
echo `cd -P . ; pwd`
echo `dirs`
echo $OLDPWD

echo "-------------------------------------------------------------------"

pushd `dirname -- $0` > /dev/null
echo `pwd -L`
popd > /dev/null

我不想强迫用户始终使用最新版本,但我知道当用户认为它使用最新版本并警告用户时。

编辑:我希望只有当用户从旧的最新版本运行时才能获得此功能,而不是当用户从发行版/ version_x.x.x运行旧版本时。

2 个答案:

答案 0 :(得分:1)

我会想到像

这样的东西
[ $(stat -c%i .) != $(stat -L -c%i ../latest) ] && echo not in the latest directory

答案 1 :(得分:0)

我不确定我完全理解这种情况,但你知道readlink命令吗? readlink latest将打印latest指向的文件/文件夹的名称。您的脚本会知道latest应指向的内容;任何偏离都可以触发对用户的警告。