0

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

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

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

这是一个例子:

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.xx 运行旧版本时

4

2 回答 2

1

我会考虑类似的事情

[ $(stat -c%i .) != $(stat -L -c%i ../latest) ] && echo not in the latest directory
于 2012-05-18T11:16:01.880 回答
0

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

于 2012-05-18T12:22:39.693 回答