LinuxとSolarisで実行する必要があるkshスクリプトがあります。特定のコマンドの出力に色を付けようとしています。 Linux(特にRHEL6)では機能しますが、Solaris(SunOS 5.10)では機能しません。
Linuxのコマンド(出力「test」が赤で正しく表示されます):
[amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
test
Solarisのコマンド(出力「test」は色付けされていません):
[amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
x1B[31mtestx1B[0m
出力に元のコードなしで出力が赤になるようにこのコマンドを作成する方法はありますか? "echo" コマンドは実際に実行するコマンドのパディングだけなので変更できません。
ベストアンサー1
\xNN
GNU sedのエスケープシーケンスですが、標準ではなく、特にSolarisでは使用できません。
スクリプトにリテラルエスケープ文字を含めることができますが、これを行うと読みやすく編集が難しくなります。
printf
これを使用してエスケープ文字を生成できます。 16進ではなく8進エスケープを理解します。
esc=$(printf '\033')
echo "test" | sed "s,.*,${esc}[31m&${esc}[0m,"
電話してもいいtput
sed 呼び出しで代替テキストを生成します。このコマンドはエスケープシーケンスを探します。用語情報データベース。理論的には、tput
スクリプトの移植性を向上させますが、実際には使用しない端末を実行する可能性を減らします。ANSIエスケープコード。
echo "test" | sed "s,.*,$(tput setaf 1)&$(tput sgr0),"