Shell讓切換目錄更方便


原文地址 http://www.cnblogs.com/zhengyuxin/articles/1933920.html

讓切換目錄更方便: pushd,popd,dirs,cd -

一,為何要使用這幾個命令?
   可能大家會有疑問,為何要使用這幾個命令,
   難道用cd不就可以切換目錄了嗎?
   沒錯,使用cd就可以切換到需要訪問的目錄,
   但是有時會是一個路徑很長,層次很多的目錄,進到此目錄下后,這時我們不小心運行了 cd命令,
   理所當然,我們回到了自己的home目錄,這時如果想回去怎么辦?

   還有:因為工作的需要,我們需要不停在幾個很深層的目錄之間切換,不止一個,
   那么即使有tab鍵幫忙,我們也會因為一個cd命令花費很多時間,如何在多個目錄之間切換時能更方便些
   pushd,popd是我們的好幫手

   說明:  pushd,popd,dirs這幾個我們講到的命令是bash內建的命令,
         所以只要登錄到了bash,這幾個命令就可以使用了

二,如何在兩個目錄之間切換?

  如果只是在兩個目錄之間切換,那么還不必使用pushd,
  這時只需使用 cd -就可以了
 
  cd -的作用是可以回到前一個目錄,
  看例子:
 
  [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [root@localhost pics]# cd -
   /root
  [root@localhost ~]# cd -
   /usr/share/kde4/apps/kget/pics
  [root@localhost pics]#

  怎么樣?在兩個目錄之間切換非常方便,無需再輸入很長的路徑

  說明:
  為何cd -能夠回到前一個目錄?
  這是因為 -在此處等同於 $OLDPWD變量,
  此問題可以參見bash的info信息,
  cd 一項有相關的說明: An argument of - is equivalent to $OLDPWD.  

  $OLDPWD變量就是bash所記錄的前一個目錄
  也就是說:$OLDPWD和-相等
 
  下面我們再看一個例子:
  [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [root@localhost pics]# echo $OLDPWD;
  /root
  [root@localhost pics]# cd $OLDPWD
  [root@localhost ~]# echo $OLDPWD;
  /usr/share/kde4/apps/kget/pics
  [root@localhost ~]# cd $OLDPWD;
  [root@localhost pics]# echo $OLDPWD;
  /root

   我們可以得到結構:  用cd -和cd $OLDPWD都可以在最近所操作的兩個目錄之間進行切換


三,如何在多個目錄之間切換?
  因為 cd -和 cd $OLDPWD都是只支持最近操作的兩個目錄,所以要在多個目錄之間操作時,
  我們需要使用 pushd

  1,
  先來介紹我們會用到的3條命令

  pushd:切換到作為參數的目錄,並把原目錄和當前目錄壓入到一個虛擬的堆棧中
         如果不指定參數,則會回到前一個目錄,並把堆棧中最近的兩個目錄作交換

  popd: 彈出堆棧中最近的目錄
  dirs: 列出當前堆棧中保存的目錄列表


  看例子:
  [root@localhost ~]# pushd /usr/local/sbin/
  /usr/local/sbin ~
  [root@localhost sbin]# dirs
  /usr/local/sbin ~
  [root@localhost sbin]# dirs -p -v
   0  /usr/local/sbin
   1  ~
  [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/
  /usr/share/kde4/apps/kget /usr/local/sbin ~
  [root@localhost kget]# dirs -p -v
   0  /usr/share/kde4/apps/kget
   1  /usr/local/sbin
   2  ~


  說明: dirs的 -p參數可以每行一個目錄的形式顯示堆棧中的目錄列表
              -v參數可以在目錄前加上編號
              注意:有 -v時,不添加 -p也可以每行一個目錄的形式顯示
  說明之二:我們可以看到:最近壓入堆棧的目錄位於最上面

  2,如何在最近的兩個目錄之間切換?

   在最近的兩個目錄之間切換:用pushd不加參數即可

   [root@localhost kget]# pushd /boot/grub/
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [root@localhost grub]# pushd
   /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
   [root@localhost kget]# dirs -v
   0  /usr/share/kde4/apps/kget
   1  /boot/grub
   2  /usr/local/sbin
   3  ~
   [root@localhost kget]# pushd
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~

   說明:可以看到,用pushd不加參數在最近的兩個目錄之間切換時,
        當前目錄總是位於堆棧的最上面

  3,如何在多個目錄之間切換?

   用 pushd +n即可
   說明:
   n是一個數字,有此參數時,是切換到堆棧中的第n個目錄,並把此目錄以堆棧循環的方式推到堆棧的頂部
   需要注意: 堆棧從第0個開始數起

   看例子:

   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [root@localhost grub]# pushd +2
   /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget
   [root@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget

   4,如何把目錄從堆棧中刪除?
   用popd即可

   看例子:
   [root@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget
   [root@localhost sbin]# popd
   ~ /boot/grub /usr/share/kde4/apps/kget
   [root@localhost ~]# dirs -v
   0  ~
   1  /boot/grub
   2  /usr/share/kde4/apps/kget

   [root@localhost ~]# popd +1
    ~ /usr/share/kde4/apps/kget
   [root@localhost ~]# dirs -v
   0  ~
   1  /usr/share/kde4/apps/kget

   說明:可以看到popd不加參數的運行情況:
        popd把堆棧頂端的目錄從堆棧中刪除,並切換於位於新的頂端的目錄
   說明之二: popd 加有參數 +n時,
   n是堆棧中的第n個目錄,表示把堆棧中第n個目錄從堆棧中刪除


四,多學一點知識

   1,pushd和popd都可以只影響堆棧而不切換目錄
     用 -n參數即可
    
    看例子:
    [root@localhost ~]# dirs -v
    0  ~
    1  /usr/share/kde4/apps/kget
    [root@localhost ~]# pushd -n /boot/grub
    ~ /boot/grub /usr/share/kde4/apps/kget
    [root@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget

    2, dirs可以清空目錄堆棧
      用 -c參數即可

     看例子:
     [root@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget
     [root@localhost ~]# dirs -c
     [root@localhost ~]# dirs -v
     0  ~

     說明:  位於堆棧頂部的目錄是當前目錄,它不能被pop出去的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM