我想修改一个脚本,让它在一天中的某个时间停止运行,同时我的机器重新启动。我发现下面的建议似乎完全符合要求,但出于某种原因,当我运行脚本时,即使脚本包含 echo 命令,我也没有得到任何输出。
我稍微修改了脚本,因为我需要它每天在同一时间运行。这是我做的唯一更改,无论我按照帖子中的原样运行它还是修改后运行它,我都没有得到任何输出。
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/rohtua/scripts
if [[ $(date +%H) -eq 19 ]]; then
echo "I don't run at this time"
exit 1
fi
echo "Something to do at other times here..."
我的目的是验证该脚本是否对我有用。它似乎可以正常工作,如果我运行该脚本,bash +x test
它就会正常工作,我会得到当时正确的响应。test
但如果我只是运行,则不会得到任何输出。
rohtua@rohtuas_pc:~/scripts $ test
rohtua@rohtuas_pc:~/scripts $
如果有人能解释为什么我没有输出,我将不胜感激。我设置了其他脚本,包括我最终想要修改的脚本,以添加计时条件,使用 echo 命令宣布进度消息,它们运行正常,只是这个脚本因为某种原因出现了问题。
答案1
但是,如果我只是运行测试,则不会得到任何输出。
这是因为test
它是一个内置bash
命令,没有参数就会返回 false(没有输出):
test
和内置命令[
使用一组基于参数数量的规则来评估条件表达式。
0 arguments
该表达式为错误。
它似乎工作正常,就像我使用以下命令运行脚本一样
bash +x test
+x
关闭调试。这似乎有副作用,bash +x test
现在运行的是你的脚本(称为test
),而不是test
内置脚本。
正确的解决方法是不要使用现有命令的名称和 bash 脚本的名称。
Unix 的一些实现(例如 Cygwin)也有一个test
可执行文件(/usr/bin/test
),它可能会优先于你的test
脚本执行,具体取决于你的PATH
配置方式:
$ which test
/usr/bin/test
$