はじめに
Linuxにはsg
というコマンドがありまして1。
sg
を使うことで一時的に別のグループでコマンドを実行できるわけです。
たとえば
sg mygroup -c 'echo $(id -g -n)'
とすれば、
mygroup
と表示されるわけです。
でもmacOSのターミナルで同じことを実行しようとすると…
zsh: command not found: sg
無情にもsg
コマンドが見つかりません。
解決策: newgrp
を使う
newgrp
は単独で実行するとexit
するまで指定したグループでコマンドを実行できるという優れものですが、そのままではシェルスクリプトで使うには不便です。
でも、大丈夫。
newgrp
の標準入力にコマンドを渡すと、sg
と同じようにその時だけ別のグループでそれを実行してくれるのです。
具体的には次のようにします:
echo 'echo $(id -g -n)' | newgrp mygroup
mygroup
やったぜ👍
そして、newgrp
はLinuxにも存在しているので、macOSでもLinuxでも両方で動くシェルスクリプトを書きたければ、newgrp
を使えばOK。
という小ネタでした。