pushd
およびpopd
は一部のシェル(bashやzshなど)でのみ利用可能で、一部のシェル(例えばsh
やdash
)では利用できません。Ubuntuでシェルスクリプトを実行する際にはデフォルトでdash
が使用されますので、スクリプトファイルの先頭に記述されるshebang (#!/bin/bash
) を正しく解釈するために、スクリプトを直接実行するか、明示的にbash
を使用してスクリプトを実行する必要があります。
#!/bin/bash
BASEDIR=$(cd $(dirname $0)/..; pwd)
pushd ${BASEDIR}/hoge
# do something
popd > /dev/null
このスクリプトを実行する際には以下のコマンドを使用してください
bash hoge.sh
または、スクリプトに実行権限を与えてから実行します。
chmod +x hoge.sh
./hoge.sh
これらのコマンドは、スクリプトをbashで実行します。スクリプトの先頭にある #!/bin/bash
のshebangが正しく解釈され、スクリプトはbashで実行されます。これにより、pushd
および popd
コマンドが正しく解釈され、期待通りの動作をします。
これらの変更により、Ubuntu環境でもスクリプトが正常に動作するはずです。