【问题标题】:In bash script Symlink are not getting created even though the commands are executed successfully在 bash 脚本中,即使命令成功执行,也没有创建符号链接
【发布时间】:2015-08-14 21:16:12
【问题描述】:

我是 RPM 包增强/开发和安装后脚本的新手。

我想在执行安装后脚本时创建符号链接,但遇到了一个问题。

脚本执行对于符号链接创建工作正常,但对于升级部分,当我检查“$RPM_pckg_home/bin”中的符号链接时,尽管命令执行成功,但它们没有被创建。

这里是示例代码;

Original_bin_path=/a/b/c
RPM_pckg_home=/d/e/f

if [[ "$1" -eq 1 ]]; then # 1 for install

  cd $RPM_pckg_home/bin

            for cmd in `ls Original_bin_path` ; do

            ln -s $Original_bin_path/${cmd} ${cmd}

            done

 elif [[ "$1" -eq 2 ]]; then # 2 for Upgrade

  cd $RPM_pckg_home/bin

        for cmd in `ls Original_bin_path` ; do

        rm ${cmd}
        ln -s $Original_bin_path/${cmd} ${cmd}

        done
fi

您能否建议问题出在哪里。

【问题讨论】:

  • 您在for 循环中的Original_bin_path 之前缺少$
  • 抱歉打错了,但事实并非如此。
  • 您可以随时检查您的脚本是否存在 shellcheck.net 中的错误

标签: bash shell symlink rpm post-install


【解决方案1】:

除了可能的拼写错误之外,您应该这样编写循环:

if [[ "$1" -eq 1 ]]; then # 1 for install    
    for cmd in "$Original_bin_path"/* ; do
        ln -s "${cmd}" "$RPM_pckg_home/bin"
    done
elif [[ "$1" -eq 2 ]]; then # 2 for Upgrade
    for cmd in "$Original_bin_path"/*; do
        rm "${cmd}"
        ln -s "${cmd}" "$RPM_pckg_home/bin"
    done
fi

不要迭代 ls 的输出,而是迭代匹配 glob 的文件,并修改 rmln 命令以适应 $cmd 值的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多