bash, shell

Makefileでユニコードをechoするためにbashをアップデートした

まず最後のオチを読みましょう。

echoでユニコードコードポイント–>絵文字出力を試みる

makeするときの表示で絵文字が見えると良いなあと思い(homebrewのビール絵文字などのように)、やり方を調べたら簡単にできるようです。
シェル上で🍣🍣(Unicode絵文字)を表示させる

ただこの通りにやってみたのですが、

echo -e '\u3031'
echo -e `\U1f479'
echo $'\u3031'

どれもうまくいきません。色々調べるとスタックオーバーフローの質問があって、bash4.2以降ならbash $'コードポイント'の記法が使えるとのことでした。

bashを4.2以上にする

自分のMacのbashを見てみると、

bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

で3.2系だったのです。でMacのbashを4.x系に変更するの通りにbashをアップデートしたら5.0.11になりました。

echo $'\U1f22f'などをやってみたらめでたく表示できました。おわり

と思ったけど、、、

Makefile内では/usr/local/bin/bashを明示しないと使えない

Makefileの中に書いてもうまくいかないことがわかりました。。まずMakefileだと、$(VAR)で変数扱いになり面倒なので、echo $'\U1f345'はやめてecho -e '\U1f345'にしたのですが、それでも表示されません。

結局Makefileの中に以下のように書くと表示できました。

# タブでなくスペースでインデントしてあるのでコピペ注意
command:
    /usr/local/bin/bash -c "echo -e '\U1f345'"

bashの最新版をbrewでインストールしたときに/usr/local/binに入るのでしょうがないですね。というかMakefile内ではコマンドを単にbashではなく、/bin/bashで実行しているということですね。フルパスで書いてしまったので他の環境では動かないですが、まあ自分でやるだけなら良いでしょう。逆にデフォルトのbashが4.2以上の環境ならこんな面倒なことをせずに普通に表示できるってことですね。

オチ

すごくそもそもなんですが、無理にコードポイントから表示させないで、どっかから絵文字をコピペしてそのままMakefileに貼り付ければ良いじゃないですか。笑
なんと馬鹿らしい。これでいいんです。

tomato:
    echo '🍅'

一旦どこかで絵文字表示させるかネットから適当にコピーしてきて貼り付ければ全て解決です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です