2020年10月14日

pushdコマンドとpopdコマンドをLinuxでも使いたかったのに、挙動が、あれ?

普段、Windows上で作業をしていて、特にバッチファイルを作っているときはpushdコマンド/popdコマンドを多用することがあります。

このコマンドは、cdコマンドでカレントディレクトリを移動する動作に似ていますが、pushdで移動したらpopdで戻れるという特徴があります。しかもstackの要領で、「行って→行って→帰って→帰って」みたいなことができるというわけですね。

どちらが発祥かは知りませんが、これと同じことをLinuxでやりたいと思えば、普通に使えました。
なので、これをシェルスクリプトに組み込んで使おうとすると、、、失敗します。
あれ?なんでだ?

普通に考えれば、手で入れて使えるコマンドは、シェルスクリプト上でも使えそうなもんなんですけどね…。

なーんて罠に陥りがちですが、シェルスクリプトがどんな動作をするかは、何がシェルとして採用されているかによって変わるわけで、デフォルトでは /bin/sh の動作に従います。/bin/sh と /bin/bash を指定していた場合では、互換性の都合から微妙に動作が違うことがあるそうで。エラー時の動作とか。

そんなうちの一つに、pushdとpopdが使えるか否かという違いがあるとのこと。

というわけで、シェバン(スクリプトの最初の1行目に書くやつ)が「#!/bin/sh」になっていると、pushd/popdが使えない。
pushd/popdを使いたければ、シェバンは「#!/bin/bash」にしておく必要がある。

という気付きでした。

続きを読む
posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング