MacPortsWiki-JP に inplace を登録
% cat foo > foo
でファイルの内容がなくなってしまうわけだけど、意図としてこういう処理をしたいときってけっこうある。しかも対象が複数あると、しかたなく for をまわしたりする。
で、そんなとき便利なのが inplace(1) というコマンド。探しものをしていて、はてなの似たような質問 がひっかかった。
単純に使っても便利なのだけど、sed のように -e オプションで複数の処理を指定できるのがナイス。こっそり ruby で書かれていたりもする。
で、当然のようにローカルで Portfile を書いてインストール。ついでに MacPortsWiki-JP にも登録 しておいた。
手元の野良 ports は subversion で管理しているのだけれど、これからアップロード用のファイルをつくるには余計なものが入らないようになど、意外と気を使うことが多い。勢いでてきとうなシェルスクリプトをでっちあげ。とりあえず動く。
#!/bin/sh # # make port # svnroot=file:///Users/kimuraw/Library/svn-repos/dports/trunk targets=${*} workdir=`mktemp -d /tmp/portXXXX` if [ "x$*" == "x" ]; then echo "[usage] port-arch port1 port2 ..." 1>&2 exit 1 fi port_version=`port -q info --version ${1} ` if [ "${port_version}" == "No port foo found." ]; then echo "error: port \"${1}\" not found" 1>&2 exit 1 fi archname=${1}-${port_version} for target in ${targets} do portinfo=`port -q info ${target} | head -1` echo ${portinfo} path=`echo ${portinfo} | cut -d\, -f2 | tr -d \ ` tmp_target="${workdir}/${path}" mkdir -p `dirname ${tmp_target}` svn export "${svnroot}/${path}" "${tmp_target}" >/dev/null done tar cvjf ${archname}.tbz2 -C "${workdir}" . rm -rf "${workdir}" 2>/dev/null
先頭の svnroot の値を書きかえれば、他の環境でも動くはず。複数 port を指定もいちおう可能。できあがる .tbz2 ファイルの名前は引数の先頭の port 名 + バージョンになる。
| 固定リンク
最近のコメント