【发布时间】:2013-11-05 10:04:30
【问题描述】:
我在最后一天左右编写了一个 Bash 脚本,并直接在 shell 上运行和调试它。
最终脚本将在 Ubuntu 服务器重新启动时执行。
我已经开始对此进行测试,但是我的脚本给了我与预期不同的结果。
我已将其缩小为“或条件”,并重写了一个更简单的脚本来测试这个异常:
已在 /etc/rc.local 中调用此脚本,并将输出重定向到日志文件 (log/reboot.log)。
我的脚本中有这个(作为测试):
#!/bin/bash
YESTERDAY=20131103
SYS_DATE=20131104
LAST_START=20131104
if [[ $LAST_START = $YESTERDAY || $LAST_START = $SYS_DATE ]];
then
echo "is equal"
else
echo "is not equal"
fi
在 shell 中执行我得到“相等”(正确答案)。在日志中重新启动后,我得到“不等于”。
谁能告诉我为什么?
【问题讨论】:
-
我没有看到任何 shebang 行。你确定是
bash运行了输出错误的脚本吗? -
rc.local不是由sh执行的吗?尝试将bash中的所有内容包装为:bash -c 'YESTERDAY=20131103; SYS_DATE=20131104; if [[ $LAST_START = $YESTERDAY || $LAST_START = $SYS_DATE ]]; then echo "is equal"; else echo "is not equal"; fi',它应该可以工作。 -
什么工作迫使脚本在 bash 中运行。所以我在 /etc/rc.local 中的脚本调用看起来像: bash /mnt/ETLModule2/scripts/rs-reboot.sh /mnt/ETLModule2/ > /mnt/ETLModule2/log/reboot-date +'%s'.log我应该继续在 Bash 中开发还是使用更标准的 POSIX 脚本编写方式?感谢您的帮助
-
对于这样一件微不足道的事情,将自己限制在 POSIX 曲目中并不是一个严重的限制。如果你发现自己渴望数组等,也许考虑改用 Bash(或 Python 等脚本语言)。