dashではpushd, popdが使えない。¶
Debianでは/bin/shは、dash、つまりDebian Almquist shellへのシンボリックリンクになっています。これはPOSIX準拠のシェルです。ここまでは知っていたのですが、組み込みコマンドのpushdやpopdが使えない(無い)ことに気づきました。!!!ということは、pushdやpopdはPOSIX準拠のコマンドではなかったということ?
早い話、shebangが/bin/bashになっている下記のコードが使えますが、
#!/bin/bash
pushd /tmp/hoge >/dev/null
printf "%-20s : " "common data"
git pull
for d in $(find /tmp/hoge/data/* -type d -prune)
do
pushd $d >/dev/null
printf "%-20s : " $(basename $d)
git pull
popd >/dev/null
done
popd >/dev/null
/bin/shになっている場合ではエラーになります。
#!/bin/sh
pushd /tmp/hoge >/dev/null
printf "%-20s : " "common data"
git pull
for d in $(find /tmp/hoge/data/* -type d -prune)
do
pushd $d >/dev/null
printf "%-20s : " $(basename $d)
git pull
popd >/dev/null
done
popd >/dev/null