LoginSignup
6
5

More than 5 years have passed since last update.

OSXのシェルスクリプトで出力に色をつける時はprintfを使う

Posted at

概要

TakkuMattsu/homebrew-refreshXcodeというXcodeのキャッシュを削除するだけのコマンドを作っていた時にハマったので備忘録として残しておく

結論

OSXではecho -eではなくprintfを利用する
(そもそもOSX標準のechoはecho -eが動かない)

補足

経緯

Xcodeのキャッシュディレクトリを削除するだけのコマンドを作っていて、どうせならスクリプトの出力に色をつけたいと思い調査
シェル - echoで文字に色をつける その1を参考にecho -eでできそうということがわかったので試してみる

echo -e "¥e[33mhoge¥e["

image

おほ、動く:smile:
早速スクリプトを変えようということで以下のようにした
(実際のコードではないです)

test.sh
#!/bin/bash
# 文字色黄色でhogeと出力
echo -e "¥e[33mhoge¥e["

で実行

$ ./test.sh

image.png

:innocent::interrobang:

なんでと思い試行錯誤、shebangを消して見る

test.sh
echo -e "¥e[33mhoge¥e["

image.png

表示された
shebangは実際には以下を実行しているのと同じとのことなので

$ /bin/bash test.sh

パスが通っているbashを確認

$ which bash
/usr/local/bin/bash

そういえばhomeberwでbashインストールしていたことを思い出す

そうなるとecho -e、OSX標準のbashでは使えないけどみんなどうしているのかなと疑問に思う:thinking:

解決

シェルスクリプトの出力に色をつけたい!にちゃんと書いてありました。

これを実行すると、スクショにあるような色見本を得ることができます。
後は使いたい組み合わせをコピって printf や echo -e に渡すだけ!
(※ macOS だと echo -e が使えないので printf に渡すのが無難です。)

printfならOSX標準で動作するのでprintfを利用してカラー表示をした:smile:
(その時の修正)

実際のキャプチャ
image.png

まとめ

今回ハマったことでshebangの意味や、シェルスクリプトのバージョンの違いで動作しないものがあることを知ることができてよかった:smiley:

参考にした記事

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5