自分のMacでは動くのに他の人のMacでは動かないというスクリプトを組んでしまいました。
具体的には、以下のようなchmod
の実行が動作したりしなかったりした。
$ chmod +w -R ${workdir}
これは確かにコマンドオプションの順が不自然なのでぼくが埋め込んだバグとしてchmod -R +w ${workdir}
に修正しました。
この挙動の差異が何に起因したのかというと、BSD版とGNU版のchmod
の違いによるものです。
Macでは多くのコマンドとしてBSD版のものがデフォルトでインストールされています。 Linux周りのコマンドに慣れているとずいぶんとオプション周りに戸惑うことが多いので、そういった場合はGNU版をインストールします。
$ brew install coreutils $ brew install findutils
デフォルトだと先頭にg
がついた形でコマンドが用意されています。
❱ ls /usr/local/opt/coreutils/bin/ ./ gbasename* gcomm* gdirname* gfold* gln* gnice* gpr* gruncon* gsleep* gtail* gtty* gwho* realpath@ stdbuf@ ../ gbasenc* gcp* gdu* ggroups* glogname* gnl* gprintenv* gseq* gsort* gtee* guname* gwhoami* runcon@ tac@ b2sum@ gcat* gcsplit* gecho* ghead* gls* gnohup* gprintf* gsha1sum* gsplit* gtest* gunexpand* gyes* sha1sum@ timeout@ base32@ gchcon* gcut* genv* ghostid* gmd5sum* gnproc* gptx* gsha224sum* gstat* gtimeout* guniq* hostid@ sha224sum@ truncate@ chcon@ gchgrp* gdate* gexpand* gid* gmkdir* gnumfmt* gpwd* gsha256sum* gstdbuf* gtouch* gunlink* md5sum@ sha256sum@ 'g['* gchmod* gdd* gexpr* ginstall* gmkfifo* god* greadlink* gsha384sum* gstty* gtr* guptime* nproc@ sha384sum@ gb2sum* gchown* gdf* gfactor* gjoin* gmknod* gpaste* grealpath* gsha512sum* gsum* gtrue* gusers* numfmt@ sha512sum@ gbase32* gchroot* gdir* gfalse* gkill* gmktemp* gpathchk* grm* gshred* gsync* gtruncate* gvdir* pinky@ shred@ gbase64* gcksum* gdircolors* gfmt* glink* gmv* gpinky* grmdir* gshuf* gtac* gtsort* gwc* ptx@ shuf@
普段使いするためには、gnubin
配下にパスを通せば良いでしょう。
path=( $(brew --prefix coreutils)/libexec/gnubin(N-/) $(brew --prefix findutils)/libexec/gnubin(N-/) $HOME/bin $path )