タスクとして対話的に実行されるBashスクリプトがありますcron
。インタラクティブに実行すると、端末にカラーテキストが出力されます。しかし、実行してcron
みると端末がないので、[1;31m
出力でも同様の結果がたくさん出てきます。
出力デバイスがエスケープコードをサポートしていない場合、Bashにエスケープコードを飲み込むように指示する方法はありますか?
これは以下に関連しています。Bashが色を印刷できるかどうかを確認する方法状態を確認することです。ただし、出力装置によって色の二重機能を維持しecho
たり、両方を維持しながら呼び出すときにprintf
できるだけ少ない変更をしたいと思います。
ベストアンサー1
端末で印刷していることを確認してください。ls
これはGNUやGNUのようなプログラムです。grep
--color=auto
端末に印刷する場合でも、理論的には、色の変更エスケープシーケンスを理解できない可能性があります。ほぼすべての共通および最小共通端末は、これらの順序を理解する。私が見たすべてのX11ターミナルエミュレータ、screen、tmux、Linuxコンソール、* BSDコンソール、PuTTY、rxvt、Console2、ConEmuなど。
normal=
green=
…
if [ -t 1 ]; then
normal=$'\e[0m'
green=$'\e32m'
…
fi
…
echo "foobar ${green}OK${normal}"
テストは[ -t 1 ]
標準出力と[ -t 2 ]
標準エラーに関するものです。
拡張をサポートしていないシェルでは、$'…'
次のように移植可能なエスケープ文字を生成できます。esc=$(echo _ | tr _ '\033')