cron 作业中的 tput 不输出粗体文本

cron 作业中的 tput 不输出粗体文本

我回来时有一个非常奇怪的行为

当我们在 Linux redhat 机器上运行此命令时

echo "$(tput bold)" start write to log  "$(tput sgr0)" >> /tmp/log.txt

我们结束了加粗字体/tmp/log.txt

more /tmp/log.txt
start write to log  <----- BOLD TEXT

但是当我们从 /etc/cron.d 下的 cron 作业运行它时

*/1 * * * * root [[ -f /home/mng_log.sh ]] &&   echo "$(tput bold)" start write to log  "$(tput sgr0)" >> /tmp/log.txt

那么文本/tmp/log.txt不是粗体的

为什么 cron 作业中的 cli 不编写大胆的测试?

答案1

tput bold写入用于告诉的字符序列当前终端它正在运行中开始以粗体书写。

它根据环境变量的值知道终端的类型$TERM。该变量由终端模拟器或getty.

tput查询termcapterminfo数据库以了解给定终端类型的给定属性使用什么序列。

例如,当在 中运行时xterm,其中$TERM将类似于xtermxterm-256colortput bold将写入(以及大多数现代终端仿真器)\e[1m识别的序列,xterm以开始以粗体书写。当在 an 中运行时hpterm,它将\e&dB改为发送。

当脚本从 运行时cron,它不是在终端中运行。如果您希望它发送一个序列来启用粗体属性,您需要通过设置$TERM环境变量来告诉它应该是哪个终端。

也许是这样的:

export TERM="${TERM-xterm}" # set $TERM to xterm if not set
printf '%s\n' "$(tput bold)start write to log$(tput sgr0)" >> /tmp/log.txt

然后你的/tmp/log.txt将包含要转动的 xterm 序列大胆的在。当文件内容发送到 xterm 终端仿真器时,它将以粗体显示,对于其他终端为 YMMV。

相关内容