Macの開発関連作業の自動化でシェルスクリプトから使うと便利なツールのまとめです。
Mac専用のコマンドは少ないないので、UNIX系やLinux系の開発でも使えます。(そっちを使っている人は普通に普段から使っているコマンドだと思いますが)
各コマンドのオプションなどの詳細は、manや-helpで確認してください。
sw_vers
システムのバージョンやビルド番号を出力するツール。
sw_vers -productVersion
OSのバージョンが出力される。「10.6.5」など。
sw_vers -buildVersion
OSのビルド番号が出力され。「10H574」など。
sed
テキストのフィルタ。ファイルやパイプで渡したテキストを加工できる。
置き換えるパターンには「*」と「.」が特別な意味を持つ。「.」は任意の文字。「*」は前の文字の繰り返し。「.」自体を使いたいときは「\.」のようにエスケープさせる。
sed -e 's/置き換えるパターン/置き換え後の文字列' 入力ファイル名
(パイプでテキストを渡すときは入力ファイル名は書かない)
test
色々を比較する。「[ ]」表記で置き換えることもできる。
test 評価式
[ 評価式 ]
評価式には、次のような式を使える。
-b パス パスにファイルが存在していて、ブロックファイルならTrue
-c パス パスにファイルが存在していて、キャラクタファイルならTrue
-d パス パスにディレクトリが存在していればTrue
-e パス パスが存在していればTrue
-f パス パスに通常のファイルが存在すればTrue
-g パス パスにファイルが存在していて、グループIDフラグが設定されていればTrue
-h パス パスにシンボリックリンクファイルが存在していればTrue。下位互換のために残されているため、「-L」を使うこと。
-L パス パスにシンボリックリンクファイルが存在していればTrue
-k パス パスにファイルが存在していて、スティッキービットがセットされていればTrue
-p パス パスが名前付きパイプ(FIFO)ならTrue
-r パス パスにファイルが存在していて、読み込むことができるならTrue
-s パス パスにファイルが存在していて、サイズが0よりも大きければTrue
-u パス パスにファイルが存在していて、ユーザーIDフラグが設定されていればTrue
-w パス パスにファイルが存在していて、書き込むことができるならTrue
-x パス パスにファイルが存在していて、実行することができるならTrue
-O パス パスが存在していて、その所有者がこのプロセスを実行しているユーザーと一致するならTrue
-G パス パスが存在していて、そのグループがこのプロセスを実行しているユーザーのグループと一致するならTrue
-S パス パスがソケットならTrue
パス1 -nt パス2 パス1が存在していてパス2よりも新しければTrue
パス1 -ot パス2 パス1が存在していてパス2よりも古ければTrue
パス1 -ef パス2 パス1とパス2が存在していて、同じファイルならTrue
-t ファイルデスクリプタ 指定されたファイルデスクリプタ番号のファイルが開かれていて、ターミナルと関連づけられていればTrue
-n 文字列 文字列の長さが0でなければTrue
-z 文字列 文字列の長さが0ならTrue
文字列 文字列がnullでなければ、True
文字列1 = 文字列2 文字列1と文字列2が同じならTrue
文字列1 != 文字列2 文字列1と文字列2が異なるならTrue
文字列1 < 文字列2 文字列1の方が前にくるならTrue
文字列1 > 文字列2 文字列1の方が後にくるならTrue
数値1 -eq 数値2 数値1と数値2が等しければTrue
数値1 -ne 数値2 数値1と数値2が異なればTrue
整数1 -gt 数値2 数値1の方が大きければTrue
数値1 -ge 数値2 数値1が数値2以上ならTrue
数値1 -lt 数値2 数値1の方が小さければTrue
数値1 -le 数値2 数値1が数値2以下ならTrue
! 評価式 評価式のNOT
評価式1 -a 評価式2 評価式1と評価式2のAND
評価式1 -o 評価式2 評価式1と評価式2のOR
(評価式) 評価式がTrueならTrue
xcodebuild
Xcodeでビルドする
xcodebuild -project プロジェクト名 -activetarget -activeconfiguration アクション
-activetargetはアクティブなターゲットを対象とする。代わりに「-alltargets」を使うと全ターゲット、「-target ターゲット名」を使うと指定したターゲット。
-activeconfigurationはアクティブな構成。代わりに「-configuration 構成名」を使うと指定した構成になる。
アクションには、build, installsrc, install, cleanが使える。
find
ファイル階層を走査する。「-name」オプションと「-delete」オプションを使うと特定のファイルだけを削除できる。
[例]
find ディレクトリ -name .DS_Store -delete
.DS_Storeファイルだけを削除する
chown
パーミッション変更。-Rオプションも指定すると再帰。
[例]
sudo chown -R root:wheel SOME.kext
packagemaker
インストーラを作る。あらかじめPackageMakerで、パッケージの設定ファイルを作っておくと楽。
10.4の場合
PKG_MAKER=/Developer/Tools/packagemaker
10.6の場合
PKG_MAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
$PKG_MAKER -build -p 出力先のパス -proj 設定ファイル
[例]
$PKG_MAKER -build -p /Desktop/Work.pkg -proj /Desktop/Work.pmproj
hdiutil
dmgファイルを作ることができる。
hdiutil create -srcfolder 元フォルダ 出力先のパス
[例]
hdiutil create -srcfolder /Desktop/Working /Desktop/Working.dmg
read
プロンプト表示。
read -p 'プロンプト' 変数
入力結果は変数に格納される。
[例]
read -p 'Do you want to quit? (y/n) ' ANSWER
if [ "$ANSWER" = "y" -o "$ANSWER" = "Y" ]
then
exit 0
fi
tar
アーカイブ作成やアーカイブの展開を行う。
アーカイブ展開
tar -xvzf アーカイブ -C 作業ディレクトリ
アーカイブ作成
tar -cvzf アーカイブ名 アーカイブ対象のパス
[例]
tar -xvzf /Desktop/Work.tar.gz -C /Desktop/Temp
tar -cvzf /Desktop/Build.tar.gz /Desktop/Build
rm
ファイルやディレクトリの削除。
-Rオプションで再帰、-fオプションで問答無用。
[例]
rm -Rf /Desktop/Temp
cp
ファイルやディレクトリのコピー
-Rオプションで再帰、-pオプションでタイムスタンプや諸々をなるべく維持する。
[例]
cp -pR /Desktop/Work /Desktop/Temp
mkdir
ディレクトリを作成する
mkdir ディレクトリのパス