プッシュ およびpopd コマンドはBashシェルの組み込み機能であり、ハードドライブ上の場所間をすばやく移動するためにディレクトリを「ブックマーク」するのに役立ちます。あなたはすでに、端末があなたのコンピュータをナビゲートするための信じられないほど速い方法であると感じるかもしれません。キーを数回押すだけで、ハードドライブ、接続ストレージ、またはネットワーク共有のどこにでも移動できます。ただし、ディレクトリ間を行ったり来たりしたり、ファイルシステム内で「失われた」場合は、その速度が低下する可能性があります。これらはまさにプッシュの問題です およびpopd 解決に役立ちます。
pushd
最も基本的なプッシュ cdによく似ています 。あるディレクトリから別のディレクトリに移動します。 oneというディレクトリがあるとします。 、 twoというサブディレクトリが含まれています 、 threeというサブディレクトリが含まれています 、 等々。現在の作業ディレクトリが1つの場合 、その後、2つに移動できます または3つ またはcdでどこでも コマンド:
$ pwd
one
$ cd two/three
$ pwd
three
pushdでも同じことができます :
$ pwd
one
$ pushd two/three
~/one/two/three ~/one
$ pwd
three
プッシュの最終結果 cdと同じです 、ただし、追加の中間結果があります:プッシュ 宛先ディレクトリと起点をエコーします。これはディレクトリスタックです 、そしてそれがプッシュを作るものです ユニーク。
スタックは、コンピューター用語では、要素のコレクションを指します。このコマンドのコンテキストでは、要素は pushdを使用して最近アクセスしたディレクトリです。 指図。歴史やパンくずリストと考えることができます。
pushdを使用してファイルシステム全体を移動できます;毎回、以前の場所と新しい場所がスタックに追加されます:
$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/five ~/one/two/three/four ~/one/two/three ~/one
スタックを構築したら、ブックマークまたは高速移動ウェイポイントのコレクションとして使用できます。たとえば、セッション中に〜/ one / two / three / four / 5内で多くの作業を行っていると仮定します。 この例のディレクトリ構造。 1つに行ったことがあることを知っています 最近ですが、プッシュのどこにあるか思い出せません スタック。 +0でスタックを表示できます (これはプラス記号の後にゼロが続く)引数で、 pushd スタック内のどのディレクトリにも変更しないでください。また、 pushdのプロンプトも表示されます。 現在のスタックをエコーするには:
$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five
または、ディレクトリを使用してスタックを表示することもできます コマンドを実行すると、 -vを使用して各ディレクトリのインデックス番号を確認できます。 オプション:
$ dirs -v
0 ~/one/two/three/four
1 ~/one/two/three
2 ~/one
3 ~/one/two/three/four/five
スタックの最初のエントリは現在の場所です。 pwdで確認できます いつものように:
$ pwd
~/one/two/three/four
0(現在の場所とスタックの最初のエントリ)から始まり、2番目 スタック内の要素は〜/ one 、これはあなたの希望する目的地です。 +2 を使用して、スタックを前に進めることができます オプション:
$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/one
これにより、作業ディレクトリが〜/ oneに変更されます。 また、新しい場所が前面になるようにスタックをシフトしました。
スタック内を後方に移動することもできます。たとえば、〜/ 1/2/3にすばやくアクセスするには 出力例を考えると、プッシュすることを念頭に置いて、1つ前に戻ることができます。 0から始まります:
$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
この方法でスタックをナビゲートし続けることができ、最近アクセスしたディレクトリの静的リストのままになります。ディレクトリを追加する場合は、ディレクトリのパスを指定するだけです。ディレクトリがスタックに初めて追加された場合は、期待どおりにリストに追加されます。
$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
ただし、スタックにすでに存在する場合は、2回目に追加されます:
$ pushd ~/one>
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
スタックは、すばやくアクセスしたいディレクトリのリストとしてよく使用されますが、実際には、これまでの場所の本当の履歴です。ディレクトリをスタックに冗長的に追加したくない場合は、 + Nを使用する必要があります および-N 表記。
明らかに、スタックは不変ではありません。 pushdで追加できます または、 popdを使用してアイテムを削除します 。
たとえば、 pushdを使用したばかりだとします。 〜/ oneを追加します スタックに、〜/ oneを作成します 現在の作業ディレクトリ。最初の(または必要に応じて「zeroeth」)要素を削除するには:
$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
$ pwd
~/one
もちろん、0からカウントを開始して、任意の要素を削除できます:
$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/one
popdを使用することもできます スタックの後ろから、ここでも0から始めます。たとえば、スタックから最後のディレクトリを削除するには、次のようにします。
$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five
このように使用すると、 popd 作業ディレクトリは変更されません。スタックを操作するだけです。
popdを使用したナビゲーション
popdのデフォルトの動作 、引数がない場合、スタックから最初の(zeroeth)アイテムを削除し、次のアイテムを現在の作業ディレクトリにします。
これは、たとえば2つの異なるディレクトリで作業していて、少しの間他の場所に移動する必要がある場合に、クイック変更コマンドとして最も役立ちます。複雑な履歴が必要ない場合は、ディレクトリスタックについて考える必要はありません:
$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one
また、 pushdを使用する必要はありません およびpopd 急速に連続して。 プッシュを使用する場合 別の場所にアクセスして、バグを追いかけたり調査したりするのに3時間気を取られると、ディレクトリスタックが辛抱強く待っていることに気付くでしょう(ターミナルセッションを終了していない限り):
$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one
プッシュ およびpopd コマンドは驚くほど便利です。それらを学ぶと、それらを有効に活用するための言い訳が見つかり、ディレクトリスタックの概念に慣れることができます。 プッシュに慣れる git stashを理解するのに役立ったのは 、 pushdとはまったく関係ありません しかし、概念的な無形性は似ています。
pushdを使用する およびpopd シェルスクリプトでは魅力的かもしれませんが、一般的には、それらを避けるのがおそらく最善です。これらはBashとZshの外部では移植性がなく、スクリプトを読み直しているときに鈍感になる可能性があります( pushd +3 cd $ HOME / $ DIR / $ TMPよりも明確ではありません または同様のもの)。
これらの警告とは別に、通常のBashまたはZshユーザーの場合は、 pushdを試すことができます。 およびpopd 。