我负责一个脚本,每个版本都会复制到一个发布文件夹,例如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运行旧版本时。
答案 0 :(得分:1)
我会想到像
这样的东西[ $(stat -c%i .) != $(stat -L -c%i ../latest) ] && echo not in the latest directory
答案 1 :(得分:0)
我不确定我完全理解这种情况,但你知道readlink
命令吗? readlink latest
将打印latest
指向的文件/文件夹的名称。您的脚本会知道latest
应指向的内容;任何偏离都可以触发对用户的警告。