Echo 在 shell 中无输出

Echo 在 shell 中无输出

我想修改一个脚本,让它在一天中的某个时间停止运行,同时我的机器重新启动。我发现下面的建议似乎完全符合要求,但出于某种原因,当我运行脚本时,即使脚本包含 echo 命令,我也没有得到任何输出。

在特定时间间隔内停止 Cron 作业

我稍微修改了脚本,因为我需要它每天在同一时间运行。这是我做的唯一更改,无论我按照帖子中的原样运行它还是修改后运行它,我都没有得到任何输出。

#!/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 该表达式为错误。

来源测试手册页 - Linux - SS64.com

它似乎工作正常,就像我使用以下命令运行脚本一样bash +x test

+x关闭调试。这似乎有副作用,bash +x test现在运行的是你的脚本(称为test),而不是test内置脚本。

正确的解决方法是不要使用现有命令的名称和 bash 脚本的名称。

Unix 的一些实现(例如 Cygwin)也有一个test可执行文件(/usr/bin/test),它可能会优先于你的test脚本执行,具体取决于你的PATH配置方式:

$ which test
/usr/bin/test
$

进一步阅读

相关内容