gpt4 book ai didi

bash - 脚本中的 `ln -s` 充当 `cp`

转载 作者:行者123 更新时间:2023-11-29 09:05:30 31 4
gpt4 key购买 nike

问题

我有这个 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

config-a.properties

db.active = A

config-b.properties

db.active = B

当我运行脚本时,会执行硬拷贝 (=cp) 并且 config.properties 通常不是符号链接(symbolic link)(也不是物理链接) ) 而是一个与 config-a.propertiesconfig-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

当我在提示符下逐行手动运行它时,我没有遇到任何问题,并且确实总是创建一个符号链接(symbolic link)并且 config.properties 指向 config-a.propertiesconfig-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 正常运行,但通常的规则是它制作硬拷贝。
  • 脚本从另一个目录运行,但在执行此处的操作之前,cdconfig*.properties 文件所在的目录。
  • 脚本要长得多,但这是重现错误的最短示例。
  • bash 版本是 4.1.2(它是本地的,所以我不关心 shellshock)。
  • ln 版本为 8.4。
  • 操作系统:Red Hat Enterprise Linux Server 6.5 版(圣地亚哥)。
  • 用于该文件夹的文件系统:ext4。

问题

  • 为什么我的脚本不能始终如一地创建符号链接(symbolic link),而是制作硬拷贝?
  • 如何在此处强制使用符号链接(symbolic link)?

最佳答案

我怀疑您有一些其他脚本或代码正在覆盖符号链接(symbolic link)。例如,sed -i 将垃圾符号链接(symbolic link)。有多种命令和实用程序可以通过创建副本、修改副本,然后将副本移动到原始文件之上来修改文件,这会破坏原始符号链接(symbolic link)。

关于bash - 脚本中的 `ln -s` 充当 `cp`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158483/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com