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