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」にしておく必要がある。

という気付きでした。

【追記】
遷移元のディレクトリに戻る場合は「cd -」のように、オプションとしてハイフンを付ければ簡単に戻れるとのこと。
こっちはWindowsのcd(chdir)コマンドにはない手法で、知りませんでした。
勉強になりました。

posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/188009136
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック