问题
我有这个 bash 脚本:
ACTIVE_DB=$(grep -P "^[ \t]*db.active" config.properties | cut -d= -f2 | tr -s " ")
echo $ACTIVE_DB
if [ "$ACTIVE_DB" = "A" ]
then
ln -sf config-b.properties config.properties
else
ln -sf config-a.properties config.properties
fi
配置-a.properties
db.active = A
配置-b.properties
db.active = B
当我运行脚本时,会执行硬拷贝 (= cp
),它通常不是符号链接(也不是物理链接),而是与orconfig.properties
内容相同的全新文件。config-a.properties
config-b.properties
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
56 -rw-r--r-- 1 ogregoir ogregoir 582 Oct 2 11:28 config.properties
当我在提示符中逐行手动运行时,我没有遇到任何问题,并且确实总是会创建一个符号链接并config.properties
指向config-a.properties
or config-b.properties
。
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
55 lrwxrwxrwx 1 ogregoir ogregoir 20 Oct 2 11:41 config.properties -> config-b.properties
笔记
- 在其他任何地方都没有打开任何文件(我是唯一的活动用户,并且使用该配置的应用程序没有运行)。
- 有时
ln -sf
行为正常,但通常的规则是制作硬拷贝。 - 该脚本是从另一个目录运行的,但在执行此处的操作之前会
cd
转到文件所在的目录。config*.properties
- 该脚本要长得多,但这是重现错误的最短示例。
bash
版本是 4.1.2(它是本地的,所以我不关心 shellshock)。ln
版本是8.4。- 操作系统:Red Hat Enterprise Linux Server 6.5 版(圣地亚哥)。
- 用于该文件夹的文件系统:ext4。
问题
- 为什么我的脚本没有始终如一地创建符号链接,而是制作了硬拷贝?
- 如何在此处强制使用符号链接?