PushdとPopdに-nオプションを使用する

PushdとPopdに-nオプションを使用する
  1. popd

    ディレクトリスタックからトップレベルエントリを削除し、新しいトップレベルディレクトリに移動します。引数が指定されない場合、popt はスタックから最上位ディレクトリを削除し、新しい最上位ディレクトリに cds します。要素は dirs にリストされた最初のディレクトリから始まり、0 から番号が付けられます。つまり、 popd は popd+0 と同じです。

    -n
    スタックのみが操作されるようにスタックからディレクトリを削除するときのディレクトリの一般的な変更を抑制します。

    /home/t$ dirs -v
     0  ~
     1  /tmp
     2  ~/mydata
    /home/t$ popd -n
    ~ ~/mydata
    /home/t$ dirs -v
     0  ~
     1  ~/mydata
    

    なぜしないでください:

    /home/t$ dirs -v
     0  /tmp
     1  ~/mydata
    
  2. pushd

    オプション:

    -n追加時に通常のディレクトリ変更を無効にします。
            ディレクトリがスタックに追加されるため、スタックのみが操作されます。
    

    議論:

    +NはN番目のディレクトリ(カウント)になるようにスタックを回転させます。
            「dirs」と表示されるリストの左から
            0)上部にあります。
    
    -NN番目のディレクトリになるようにスタックを回転させます。
            「dirs」と表示されるリストの右から
            0)上部にあります。
    

    dir は最上位ディレクトリスタックに DIR を追加します。
            新しい現在の作業ディレクトリです。

    /tmp$ dirs -v
     0  /tmp
     1  ~
     2  ~/mydata
    /tmp$ pushd -n +1
    /tmp$ dirs -v
     0  /tmp
     1  ~/mydata
     2  /tmp
    

    なぜしないでください:

    /tmp$ dirs -v
     0  ~
     1  ~/mydata
     2  /tmp
    

    または

    /tmp$ dirs -v 0 /tmp 1 ~ 2 ~/mydata

答え1

スタックの一番上はdirs常に現在のディレクトリです。そして、-nディレクトリの変更は避けるべきです。したがって、-nスタックの上部への変更は避けるべきです。

あなたがにいると仮定します~(それからスタックの一番上はです~)。今あなたは実行popd いいえ -n~これにより、スタックの最上位要素が削除され、現在のディレクトリが/tmp

~ $

 0  ~
 1  /tmp
 2  ~/mydata 

~ $ popd

 0  /tmp
 1  ~/mydata

/tmp $ # you are now in /tmp

標識は-nこれらの行為を禁止しなければなりません。したがって、スタックの最上位要素を削除するのではなく、上から2番目の要素を削除します。したがって、実行すると、popd -n現在のディレクトリは変更されていません。

~ $

 0  ~
 1  /tmp  # we will remove this one
 2  ~/mydata 

~ $ popd -n

 0  ~
 1  ~/mydata

~ $ # you are still in ~

の場合、pushd状況はより複雑です。この+Nシンボルは、N番目の要素を一番上に移動してスタックを回転させます。したがって/tmp(スタックの一番上は/tmp)入って実行すると、pushd +1スタックは次の変換を行い、現在のディレクトリは次に変更されます~

/tmp $ pushd +1

             ----------------------------
             |                          |
 0  /tmp -----     |------>0 ~          |
 1  ~ --------------   |-->1 /mydata    |
 2  ~/mydata------------   2 /tmp  <----|


~ $ # you are now in ~

今回も-n、現在のディレクトリへの変更を抑制する必要があります。したがって、同じことを行いますが、~スタックの上部に配置するのではなく、スタックの上部を変更せずにそのままにします(例/tmp:)。

/tmp $ pushd -n +1

             ----------------------------
             |                          |
 0  /tmp -----     |------>0 /tmp       | # instead of ~ 
 1  ~ --------------   |-->1 /mydata    |
 2  ~/mydata------------   2 /tmp  <----|


/tmp $ # you are still in /tmp

まあ、私はそれが明らかな行動ではないことに同意します。ただし、ディレクトリを最上位にすることは、そのディレクトリに移動して実行されることを覚えておくとcdわかりやすくなります。最後の例()ではpushd -n +1フラグが設定されているため、コマンドは実行されません。だからあなたはまだ中にあるので、スタックの上部はまだあります。 cd ~-n/tmp/tmp

答え2

その効果は非常に明白です-n。インデックス0のスタックを変更しません。

インデックス0は常に$PWD(またはpwd)です。いいえ-nオプションを使用している場合は変更します。

つまり、popdそうでなければpushd実行されませんcd

他の質問には新しい質問をしてください。

関連情報