GNU/Linux >> Linux の 問題 >  >> Linux

pushdとpopdを使用してBashシェルをナビゲートする

プッシュ および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のデフォルトの動作 、引数がない場合、スタックから最初の(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


Linux
  1. Linuxコマンドラインナビゲーションのヒント:pushdおよびpopdコマンドの基本

  2. Bashシェルのカスタマイズ

  3. Bashシェルでのクイックディレクトリナビゲーション?

  1. `$ _`の意味を理解しますか?

  2. スクリプト内の bash シェル スクリプトおよび関数の変数スコープ

  3. 最後の x 個のファイルを保持し、残りを削除する bash スクリプトの何が問題になっていますか?

  1. Linuxのwatchコマンドでコマンドとタスクを監視する

  2. sourceコマンドを使用して関数と変数をBashにインポートします

  3. .bashrcの目的とそれはどのように機能しますか?