【问题标题】:if block without else shell script in %preun scriptletif 在 %preun scriptlet 中没有 else shell 脚本的块
【发布时间】:2015-06-06 13:38:51
【问题描述】:

我的规范文件 %preun 标记中有以下脚本:

if [ $1 -eq 0 ]; then 
echo "Stopping blah service before uninstalling.." 
. /etc/init.d/blahforever stop 
echo "blah service stopped."
fi

我收到“意外标记 `fi' 附近的语法错误”错误

但是当我添加 else 块时它运行良好:

if [ $1 -eq 0 ]; then 
    echo "Stopping blah service before uninstalling.." 
    . /etc/init.d/blahforever stop 
    echo "blah service stopped."
else
    echo "I dont need else block"
fi

但我不需要 else 块!我该如何摆脱它? PS:我尝试在条件后删除分号,但仍然没有帮助。

【问题讨论】:

  • 这似乎指向 /etc/init.d/blahforever 中的错误
  • 您似乎也在该更改中缩进了一些脚本(谁知道还有什么)。如果你从底部的 sn-p 中删除那两条 else/echo 行,你还会得到那个语法错误吗? (还有为什么点源服务脚本调用?)
  • 是的,我确实尝试删除所有回声线,但仍然失败。如果我只是删除 else 块,脚本就可以正常工作。
  • @EtanReisner 删除缩进似乎有效!
  • 你是什么意思“删除缩进似乎工作”?那没有意义。您可以将 exact 行粘贴到您的 scriptlet 中吗?

标签: bash shell centos rpm rpmbuild


【解决方案1】:

这是“./etc/init.d/blahforever stop”行中的shell语法错误。

没有要获取的文件(即读入当前 shell) 称为“停止”。

【讨论】:

  • 没有脚本运行良好,正如我所说,如果我只添加一个 else 块,整个脚本运行没有问题!
  • 是的“运行”,而被采购,然后导致错误
  • 可以通过这种方式为点源文件提供参数。初始化脚本通过此调用将stop 变为$1
  • 我遵从迂腐。 ;-) 运行为 .来源(而不是直接调用)当然是不寻常的功能。使用“sh -e -x test.sh”运行 %post 脚本将在出错时退出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多