両方の実際の用途は何ですかpushd
?そして上記の2つのコマンドを使用すると、popd
どのような利点がありますか?cd
cd -
編集するcd -
:これら2つのコマンドの実際の使用例やディレクトリとともにスタックを維持する理由(タブの完成、短縮エイリアスcd ..
などがある場合)を探しています。
答え1
pushd
、popd
とdirs
操作できるシェル組み込み関数です。ディレクトリスタック。ディレクトリを変更するために使用できますが、元のディレクトリに戻ります。
例えば
次のディレクトリから始めます。
$ 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
持つpushd
popd
コマンドの非常に便利なユースケース複数のフォルダを同時に処理するために使用されます。
スタックは列挙されているので、非常に簡単にナビゲートできます。これは、作業中に複数の作業フォルダを使用できることを意味します。
簡単な例については、以下を参照してください。
まず、サンプルフォルダ構造を作成しましょう。
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
スタックに追加します。その後、ディレクトリツリーでどのくらい「遠くにある」かに関係なく、を使用して移動してcd
XXに戻ることができます(複数のレベルをスキップ、横にスキップすることができます)。popd
特にbashスクリプトに便利です。
答え4
~のため強く打つ、デフォルトでは:pushd
cdではなく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
。)