Linux &引用;tput:未指定$TERM值和-T“;CRON进程记录的错误

Linux &引用;tput:未指定$TERM值和-T“;CRON进程记录的错误,linux,shell,unix,cron,tput,Linux,Shell,Unix,Cron,Tput,我们有一个由CRON运行的shell脚本。shell脚本依次运行python脚本,该脚本从FTP服务器下载文件,然后在这些文件上运行java日志处理器。这个过程运行得很好,除了我不断收到CRON电子邮件,即使没有错误。至少,我认为没有错误。cron电子邮件有两行,其中一行是 tput: No value for $TERM and no -T specified 经过研究,我发现这与设置$TERM变量有关。我不知道该怎么做。任何帮助都将不胜感激。谢谢 脚本中的某些内容正在调用tput二进制文件

我们有一个由CRON运行的shell脚本。shell脚本依次运行python脚本,该脚本从FTP服务器下载文件,然后在这些文件上运行java日志处理器。这个过程运行得很好,除了我不断收到CRON电子邮件,即使没有错误。至少,我认为没有错误。cron电子邮件有两行,其中一行是

tput: No value for $TERM and no -T specified

经过研究,我发现这与设置$TERM变量有关。我不知道该怎么做。任何帮助都将不胜感激。谢谢

脚本中的某些内容正在调用
tput
二进制文件
tput
尝试检查
$TERM
变量,以确定当前端子,从而产生正确的控制序列。cron运行时没有终端,因此您可以从
tput
获取该错误


您可以手动为cron作业分配一个
术语
值(可能是
dumb
或类似的值),或者(这可能是更好的解决方案),您可以找出调用的是什么
tput
,并删除该调用。

cron守护进程由“root”用户在其自己的shell中运行。默认情况下,cron将附加发送给运行脚本的用户的系统邮件(这就是为什么您在系统邮件中将发件人视为“root”)。“用户”是您在设置crontab时登录的用户。邮件将包含控制台和错误消息。在Ubuntu上,可以在
/var/mail/
上查看邮件文件

如果未设置
$TERM
变量,cron将在邮件文件中发出
tput:no-value for$TERM和no-T-specified
错误。要停止这些错误,请使用crontab中的
TERM=dumb
(或系统中的另一个可用终端,如
xterm
)设置
$TERM
变量。
toe
命令将显示当前系统上的terminfo定义。如果您缺少该命令,那么在大多数Linux系统上都可以在
/usr/share/terminfo
中看到原始数据

即使您已经停止了错误,您仍然可能会收到附加了控制台消息的系统邮件。随着时间的推移,此文件将像日志一样填满,因此您可能希望停止这些消息。要停止cron系统邮件,请使用
MAILTO=”“

因此,您的crontab可能看起来像:

MAILTO=""
TERM=xterm

* * * * * sh /path/to/myscript.sh
您可以使用“crontab-l”查看crontab(您作为用户登录的用户)。


-->我针对TPUT-1问题的工作解决方案:

这样,如果有交互或非交互的shell-tput仍然可以正常工作,那么就没有意义了


6a5h4

我调用其他库,它们可能调用tput。我将尝试分配一个术语值,看看它是否能解决问题谢谢!我只是按照您的建议将术语变量设置为“dumb”,这就成功了@海鸥无论呼叫什么
tput
都假定终端可用于输出。Cron作业在没有终端的情况下运行。如果设置<代码>术语=哑< /COD> Work,那太好了,但是您可能需要考虑为什么要调用<代码> tPUT//Cube >。我可以想象,错误的假设会导致其他问题。
# when $TERM is empty (non-interactive shell), then expand tput with '-T xterm-256color'
[[ ${TERM}=="" ]] && TPUTTERM='-T xterm-256color' \
                  || TPUTTERM=''

declare -r    RES='tput${TPUTTERM} sgr0'       REV='tput${TPUTTERM} rev'
declare -r    fRD='tput${TPUTTERM} setaf 1'    bRD='tput${TPUTTERM} setab 1'
declare -r    fGN='tput${TPUTTERM} setaf 2'    bGN='tput${TPUTTERM} setab 2'
...
echo ${fRD}" RED Message: ${REV} This message is RED REVERSE. "${RES}
echo ${fGN}" GREEN Message: ${REV} This message is GREEN REVERSE. "${RES}
...