web-dev-qa-db-ja.com

エコーで色を表示するosxシェルスクリプトを取得する方法

Macで実行しているbashスクリプトのエラーにカラー出力を追加しようとしています。問題は、色が機能していないことです。動作しないことを示すために、最も単純なスクリプトを作成しました。

#!/bin/bash

echo -e "\e[1;31m This is red text \e[0m"

ただし、この画像に示すように、実行すると色がまったく表示されません。ただし、lsコマンドのカラー出力は正常に機能しています。

enter image description here

33
nycynik

OSXには、\eエスケープ文字をサポートしない古いバージョンのBashが付属しています。 \x1Bを使用するか、Bashを更新します(brew install bash)。

ただし、さらに良いのは、tputを使用することです。

33
danemacmillan

つかいます \033または\x1B の代わりに \eはde <Esc> キャラクター。

echo -e "\033[1;31m This is red text \033[0m"

http://misc.flogisoft.com/bash/tip_colors_and_formatting を参照してください

66
guapolo

別のオプションは、\e表記を尊重するzshを使用することです。

#!/bin/zsh
4
Adam Matan

スクリプトファイルでは、printfがさらに別のオプションになる可能性があるため、末尾の"\n"しかし。

#!/bin/bash

echo -e "\e[31mOutput as is.\e[m"
printf "\e[32mThis is green line.\e[m\n"
printf "\e[33;1m%s\n" 'This is yellow bold line.'

MacOS High Sierra 10.13.6でテスト済み:

% /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-Apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
3
cu39