tput:没有 $TERM 的值,也没有指定 -T

Com*_*cus 6 cron tput

我正在尝试通过 cron 运行一个 bash 脚本,并且在执行开始时出现以下错误:

tput: No value for $TERM and no -T specified
Run Code Online (Sandbox Code Playgroud)

这是我的 crontab 中的内容:

0 8 * * 1-5 cd /var/www/inv/ && /var/www/inv/unitTest run all 2>&1| mail -r "user@example.com" -s "Daily Inventory Unit Test Results" user@example.com
Run Code Online (Sandbox Code Playgroud)

Cel*_*ada 9

您的单元测试脚本可能会调用tput以生成漂亮的输出,显示哪些测试通过和失败。下cron没有终端,因此没有终端类型($TERM),所以tput无法控制不存在的终端。

您的单元测试脚本需要有 2 种模式:

  • 在终端上运行:它可以调用tput生成漂亮的输出
  • 不在终端上运行:它不应该调用tput,而是生成一个通用的纯文本输出格式,适合像您在这里所做的那样通过管道传输到电子邮件中。

单元测试知道它们是否在终端上运行的最简单方法是测试 stdio 文件描述符是否引用终端。如果是shell脚本,则:

if [ -t 1 ]; then
    tput bold; echo pretty; tput sgr0
else
    echo ugly
fi
Run Code Online (Sandbox Code Playgroud)

基本上:tput除非您在终端上运行,否则不要调用,这样您就可以避免遇到的错误,并在您碰巧运行的任何模式下产生合理的输出。