我回来时有一个非常奇怪的行为
当我们在 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
查询termcap
或terminfo
数据库以了解给定终端类型的给定属性使用什么序列。
例如,当在 中运行时xterm
,其中$TERM
将类似于xterm
或xterm-256color
,tput 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。