PushdとPopdコマンドの使い方は?

PushdとPopdコマンドの使い方は?

両方の実際の用途は何ですかpushd?そして上記の2つのコマンドを使用すると、popdどのような利点がありますか?cdcd -

編集するcd -:これら2つのコマンドの実際の使用例やディレクトリとともにスタックを維持する理由(タブの完成、短縮エイリアスcd ..などがある場合)を探しています。

答え1

pushdpopddirs操作できるシェル組み込み関数です。ディレクトリスタック。ディレクトリを変更するために使用できますが、元のディレクトリに戻ります。

例えば

次のディレクトリから始めます。

$ pwd
/home/saml/somedir
$ ls
dir1  dir2  dir3

dir1にプッシュ

$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir

dirsこのコマンドは、スタックに2つのディレクトリがあることを確認します。dir1そして元のディレクトリであるsomedirメモ:私たちの「現在の」ディレクトリはです~/somedir/dir1

../dir3にプッシュされる(dir1今はその中にあるので)

$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3

dirsディスプレイスタックには3つのディレクトリがあります。dir3、、、dir1そしてsomedir。方向に注意してください。各新しいディレクトリが左側に追加されます。ディレクトリポップアップを開始すると、左側にも表示されます。

手動でディレクトリを次に変更します。../dir2

$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir

それでは目次ポップアップを始めましょう。

$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1

突然戻ってきましたdir1

再び人気があります...

$ popd
~/somedir    
$ pwd
/home/saml/somedir

私たちは私たちが始めた場所に戻りましたsomedir

やや混乱するかもしれませんが、スタックのヘッドは現在存在するディレクトリです。somedirしたがって、再び戻ると、dirs次のようになります。

$ dirs
~/somedir

私たちのスタックは実際には空です。

$ popd
bash: popd: directory stack empty

答え2

持つpushdpopdコマンドの非常に便利なユースケース複数のフォルダを同時に処理するために使用されます。

スタックは列挙されているので、非常に簡単にナビゲートできます。これは、作業中に複数の作業フォルダを使用できることを意味します。

簡単な例については、以下を参照してください。


まず、サンプルフォルダ構造を作成しましょう。

    user@vb:~$ mkdir navigate
    user@vb:~/navigate$ mkdir dir1
    user@vb:~/navigate$ mkdir dir2
    user@vb:~/navigate$ mkdir dir3

その後、すべてのフォルダをスタックに追加できます。

    user@vb:~/navigate$ pushd dir1/
    ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir1$ pushd ../dir2/
    ~/navigate/dir2 ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir2$ pushd ../dir3/
    ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate

次の方法で見つけることができます。

    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir2
     2  ~/navigate/dir1
     3  ~/navigate

安全なナビゲーションのために、最後の(0)フォルダは常に上書きされるため、2回追加する必要があります。

    user@vb:~/navigate/dir3$ pushd .
    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

これで、これらのフォルダに移動して、フォルダのエイリアスのようにスタックを使用できるようになります。次の部分は説明が必要だと思います。

    user@vb:~/navigate/dir3$ cd ~4
    user@vb:~/navigate$ dirs -v
     0  ~/navigate
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate$ cd ~3
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate/dir1$ touch text.txt
    user@vb:~/navigate/dir1$ cp text.txt ~2
    user@vb:~/navigate/dir1$ ls ~2
    text.txt
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

追加のヒントのエイリアスを作成しますdirs -v

たとえば、

# In ~/.bashrc
alias dirs="dirs -v"

答え3

CDだけでは不可能なdirsスタックを使用する簡単なユースケース:

pushd .現在のディレクトリXXをdirsスタックに追加します。その後、ディレクトリツリーでどのくらい「遠くにある」かに関係なく、を使用して移動してcdXXに戻ることができます(複数のレベルをスキップ、横にスキップすることができます)。popd特にbashスクリプトに便利です。

答え4

~のため強く打つ、デフォルトでは:pushdcdではなくcdを使用してディレクトリを変更できます。実際の使用:訪問したディレクトリ(正しい:累積)の履歴を保存してディレクトリを切り替えることができます。

pushd /home; pushd /var; pushd /tmp

スタック使用量を表示してdirsより簡単にナビゲートするには(「スタックアイテム」の数を取得するには、以下を使用します。)

dirs -v

出力:

me@myhost:/home$ dirs -v
 0  /home
 1  /var
 2  /tmp

ここでこの数字をcdと同様に使用します。~

cd ~1

ただし、数字が並べ替えられて位置 "0" が変わるので、pushd次のようにディレクトリを一番上の位置に 2 回移動します (または位置 0 にダミーを使用)。

me@myhost:/home$ dirs -v
 0  /home
 1  /home
 2  /var
 3  /tmp

今1..3は自分の位置を維持します

(スタックから現在のディレクトリを解放するか、履歴から削除するにはを使用しますpopd。)

関連情報