PackageMaker を使用してアプリケーションのインストーラーを作成しています。インストール中に bash スクリプトを実行して、シリアル ポート通信用の JNI ライブラリである rxtx を正しくインストールする必要があります。このライブラリには、ユーザー "root" とグループ "uucp" を含むディレクトリ /var/lock が必要です。lib が /var/lock に書き込みできるようにするには、インストール スクリプトで現在のユーザーをグループ "uucp" に追加する必要もあります。
これで、アプリケーション インストーラーを実行すると、プレインストール スクリプトが root として実行されます。したがって、「whoami」は、実際にインストーラーを実行しているユーザーではなく、ルートを返します。その結果、実際のユーザーが「uucp」のメンバーとして追加されていないため、rxtx は /var/lock にロック ファイルを作成できません。
スクリプトがインストーラーによって実行されている間にユーザーを取得するにはどうすればよいですか? それとも、/var/lock のパーミッションを別のグループに設定したほうがよいのでしょうか? どんな提案も大歓迎です!
#!/ビン/sh curruser=`whoami` logger "ユーザー $curruser の /var/lock のパーミッションを設定しています!" もしも [ !-d /var/ロック] それから logger "/var/lock を作成しています!" sudo mkdir /var/lock フィ sudo chgrp uucp /var/lock sudo chmod 775 /var/lock # MacOSX 10.5 以降では dscl を使用 if [ `sudo dscl . -read /Groups/uucp グループメンバーシップ | grep $curruser | wc -l` = "0" ] それから logger "ユーザー $curruser を /Groups/uucp に追加してください!" sudo dscl . -append /Groups/uucp GroupMembership $curruser # 使用を元に戻す: # sudo dscl . -delete /Groups/uucp GroupMembership $curruser そうしないと logger "ユーザーはすでにグループ uucp のメンバーです!" フィ