帰ってきたらとても奇妙な行動をしました。
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
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 と表示されます。