2012-05-18 33 views
0

我处理的是每个发行版复制到发行文件夹的脚本,例如release/version_0.0.2。我还为此版本(文件夹release/version_0.0.2)设置了一个符号链接,名称为latest。要运行脚本,你必须在脚本所在的文件夹中(使用相对路径进行糟糕的设计决策)。检查目录(符号链接)是否仍指向同一位置

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

我的ide是检查脚本是否从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 

我不想强迫用户总是使用最新的版本,但我发现什么时候用户认为它使用最新版本并警告用户。

编辑:我只想得到这个,如果用户从旧版本运行,而不是当用户从release/version_x.x.x运行旧版本。

+0

一个脚本,问我关于安装的问题会烦我。想想提供一个安装程序,也许?或者修复它,以便用户不必在目录中(这会让我更加恼火)。这样,用户就可以控制并设置事物,以便他们可以使用他们想要的版本,而无需通过脚本进行讨论来尝试再次猜测他们的意图。安装程序可以将“最新”符号链接切换到自己(如果它没有找到更新的版本,请考虑重新安装旧版本)。拥有版本编号的位置是_good_功能。 –

回答

1

我会考虑像

[ $(stat -c%i .) != $(stat -L -c%i ../latest) ] && echo not in the latest directory 
0

不知道我完全理解的情况是什么,但你知道的readlink命令? readlink latest将打印latest指向的文件/文件夹的名称。你的脚本会知道latest应该指向什么;任何偏离都会触发用户的警告。

相关问题