![定义 lsb 函数后 Bash 脚本中止](https://linux22.com/image/698715/%E5%AE%9A%E4%B9%89%20lsb%20%E5%87%BD%E6%95%B0%E5%90%8E%20Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%AD%A2.png)
我目前正在尝试运行一个脚本,该脚本需要定义一些 LSB 函数。以下是这种情况:
echo "step 1"
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
echo "step 2"
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
echo "step 3"
但是脚本在步骤 2 之后中止执行,我从未得到输出“步骤 3”。此脚本是 deluged 的启动脚本。它曾经可以工作,但我注意到我的 deluge 不再工作了,我将问题追溯到这行代码。
有人知道这是什么原因造成的吗? init-functions 文件存在于指定的目录中。
答案1
如果 shell 脚本中的某些内容使用了 exec 或 exit 而不是 return 或者只是到达文件末尾,那么在获取该 shell 脚本的过程中,您就会看到中止。
从文件系统布局来看,我猜你使用的是 RedHat 衍生产品,在 CentOS 6 和 CentOS 7 上,/lib/lsb/init-functions 文件非常短,默认情况下包含的内容很少,因此除非对其进行了修改,否则我不认为你看到的结果可能存在。你的下一个调试步骤可能是检查该文件是否有其他来源,否则插入更多调试消息以准确找出它在哪一行中中止。
答案2
我找到了问题所在:文件权限错误,不允许脚本读取该文件。