ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

macOSのechoとwhichコマンドを実行した時にZSHシェルのビルトインコマンドを使わない方法

Catalina以降のmacOSは、ZSHシェルがデフォルトになっています。 BashからZSHへの変更は別段困ることはなかったのですが、ちょっとだけ困ったのが一部のコマンドはシェルのビルトインコマンドが使われるということです。 仕事柄LinuxとmacOSを行き来していると、ちょっと動作が異なったりして困ることが稀にあります。

対処方法

次のサイトかman zshbuiltinsでマニュアルを開くことで、シェルのビルトインコマンドが確認できます。 zsh.sourceforge.io

そして表題の件ですが、マニュアルに書かれているようにdisableの後にnameを入力すると、そのコマンドはシェルのビルトインコマンドが使わなくなります。ただしコマンド実行しただけではそのシェルが開かれている間だけ、その設定は有効になります。永続化したければ ~/.zshrcに次の設定を書くと良いようです。

disable which
disable echo

設定を書き加えた後は source ~/.zshrcと実行します。これで、/usr/binなどにあるコマンドが普通に呼び出されるようになります。

% which echo 
/opt/homebrew/opt/coreutils/libexec/gnubin/echo
% echo --help 
Usage: echo [SHORT-OPTION]... [STRING]...
  or:  echo LONG-OPTION

その他、必要に応じてHomebrewなどでCLIツールをインストールするといいと思います。

% brew install gnu-sed
% brew install coreutils

Homebrewにはgnuから始まる幾つかのパッケージがあるので、Linuxのコマンドとの互換性に悩んだらそちらを使うのも手かもしれません。GPL-v3のソフトウェアをAppleがデフォルトバンドルしたくなかろうが、ユーザーが使うのは自由ですから。

% brew search gnu-
==> Formulae
arm-linux-gnueabihf-binutils      gnu-getopt                        gnu-tar                           gnupg-pkcs11-scd                  gnustep-make
deja-gnu                          gnu-go                            gnu-time                          gnupg@1.4                         gnutls ✔
feedgnuplot                       gnu-indent                        gnu-typist                        gnupg@2.2                         gtk-gnutella
gnu-apl                           gnu-prolog                        gnu-units                         gnuplot                           x86_64-linux-gnu-binutils
gnu-barcode                       gnu-scientific-library            gnu-which ✔                       gnuplot@4
gnu-chess                         gnu-sed ✔                         gnumeric                          gnuradio
gnu-cobol                         gnu-shogi                         gnunet                            gnuski
gnu-complexity                    gnu-smalltalk                     gnupg                             gnustep-base

==> Casks
gnucash                                                                              homebrew/cask-fonts/font-gnu-unifont

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。