gpt4 book ai didi

bash - 符号链接(symbolic link)不是由 *.deb 包的 postinst 创建的。改为创建新文件

转载 作者:行者123 更新时间:2023-12-05 07:57:19 25 4
gpt4 key购买 nike

我创建了一个 *.deb 包,它将一些文件保存到所需的位置,效果很好。在 postinst 期间,我生成了一个新文件(使用我自己的脚本“mergeconfig”将 2 个文件合并在一起),该文件创建得很好。

但是,在 postinst 的下一行,我尝试创建一个到这个新文件的符号链接(symbolic link),这没有按预期工作。

我似乎没有得到链接,而是得到了一份硬拷贝/一个新文件:

$ ls -la /etc/app/conf-enabled/
-rw-r--r-- 1 root root 2600 Dec 1 17:00 enabledconfig

我尝试将代码拉出到它自己的文件中并从 postinst 文件中执行它(在赋予它可执行权限之后)并得到了相同的结果。尽管如果我手动运行该文件,我会创建一个有效的符号链接(symbolic link):

$ /../../updateEnabledConf
-- Merge this package's server config into app config
Complete
-- Update conf-enabled symlink

$ ls -la /etc/app/conf-enabled/
lrwxrwxrwx 1 root root 42 Dec 1 17:06 enabledconfig -> /etc/app/conf-available/server-app

updateEnableConf 中的代码是:

#!/bin/bash
SERVERNAME="server"

APPNAME="app"
CONFIGNAME="enabledconfig"
ETCAPPDIR="/etc/app"
CONFAVAILABLEDIR="$ETCAPPDIR/conf-available"
CONFENABLEDDIR="$ETCAPPDIR/conf-enabled"
CONFAPPDIR="$ETCAPPDIR/conf-app"
CONFSERVERDIR="$ETCAPPDIR/conf-server"

echo " -- Merge this package's server config into app config"
sudo mergeconfig $CONFAPPDIR/$APPNAME $CONFSERVERDIR/$SERVERNAME $CONFAVAILABLEDIR/$SERVERNAME-$APPMNAME

echo " -- Update conf-enabled symlink"
sudo ln -s -f $CONFAVAILABLEDIR/$SERVERNAME-$APPNAME $CONFENABLEDDIR/$CONFIGNAME

exit 0

我不确定我做错了什么,因为在安装 deb 包期间没有正确创建符号链接(symbolic link),但是当我从 putty 手动运行相同的文件时却创建了正确的符号链接(symbolic link)。两个用户都有 sudo 访问权限,我正在使用 gdebi 安装包,我还有其他包以相同的方式创建符号链接(symbolic link)而没有问题。任何帮助都会很棒

更新

经过更多调查,发现符号链接(symbolic link)是由 postinst 脚本正确创建的,但是在符号链接(symbolic link)路径之后使用 sed 命令直接调用了另一个文件:

ENABLEDCONF="/etc/app/conf-enabled/enabledconfig"
sed -i 's#<search>#<replace>#g' $ENABLEDCONF

这似乎也从符号链接(symbolic link)指向的文件中获取数据,但是用新文件覆盖了符号链接(symbolic link)。我更新了 sed 行以使用 readlink 命令,这解决了问题:

sed -i 's#<search>#<replace>#g' $(readlink $ENABLEDCONF)

感谢帮助

最佳答案

经过更多调查,发现符号链接(symbolic link)是由 postinst 脚本正确创建的,但是在符号链接(symbolic link)路径之后使用 sed 命令直接调用了另一个文件:

ENABLEDCONF="/etc/app/conf-enabled/enabledconfig"
sed -i 's#<search>#<replace>#g' $ENABLEDCONF

这似乎也从符号链接(symbolic link)指向的文件中获取数据,但是用新文件覆盖了符号链接(symbolic link)。我更新了 sed 行以使用 readlink 命令,这解决了问题:

sed -i 's#<search>#<replace>#g' $(readlink $ENABLEDCONF)

——马丁·高夫

关于bash - 符号链接(symbolic link)不是由 *.deb 包的 postinst 创建的。改为创建新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233687/

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