Pushd 및 Popd에 -n 옵션 사용

Pushd 및 Popd에 -n 옵션 사용
  1. popd

    디렉터리 스택에서 최상위 항목을 제거하고 새 최상위 디렉터리로 이동합니다. 인수가 제공되지 않으면 popd는 스택에서 최상위 디렉터리를 제거하고 새로운 최상위 디렉터리로 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) 상단에 있습니다.
    
    -N N번째 디렉터리(count)가 되도록 스택을 회전합니다.
            "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이러한 행위를 금지해야 합니다. 따라서 스택의 최상위 요소를 제거하는 대신 맨 위에서 두 번째 요소를 제거합니다. 따라서 실행하면 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.

다른 질문에는 새로운 질문을 하세요.

관련 정보