Alias ​​​​Cd to Pushd - 좋은 생각인가요?

Alias ​​​​Cd to Pushd - 좋은 생각인가요?

다음 별칭을 사용하는 것이 좋습니다.

cd() {
    pushd $1;
}

배쉬에서?

popd하나만 사용 하는 것이 아니라 일련의 s를 사용할 수 있기 때문에 이것이 매우 유용하다고 생각합니다 cd -.

문제가 발생할 수 있는 상황이 있나요?

답변1

개인적으로 저는 bashrc에 다음을 가지고 있으며 항상 사용합니다.

pushd()
{
  if [ $# -eq 0 ]; then
    DIR="${HOME}"
  else
    DIR="$1"
  fi

  builtin pushd "${DIR}" > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

pushd_builtin()
{
  builtin pushd > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

popd()
{
  builtin popd > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

alias cd='pushd'
alias back='popd'
alias flip='pushd_builtin'

그런 다음 브라우저처럼 명령줄을 탐색할 수 있습니다. cd디렉터리를 변경합니다. back이전에 cd편집한 디렉토리 로 이동합니다. flip현재 디렉터리와 이전 디렉터리 사이를 디렉터리 스택에서 꺼내지 않고 이동 합니다 . 전반적으로 훌륭하게 작동합니다.

내가 알고 있는 유일한 실제 문제는 이것이 나에게 완전히 익숙하지만 다른 사람의 컴퓨터에는 존재하지 않는 명령 세트라는 것입니다. 그래서 다른 사람의 컴퓨터를 사용해야 한다면 조금 답답할 수도 있습니다. pushd및 직접 사용에 익숙하다면 popd이 문제가 발생하지 않습니다. 별칭을 cd넣지 않고 별칭을 지정하면 존재하지 않는 문제가 발생하지 않지만 popd다른 컴퓨터에서는 원하는 효과를 얻지 못하는 문제가 계속 발생합니다 back.cd

그러나 귀하의 특정 구현은 일반 자체가 홈 디렉토리로 이동하는 cd것처럼 정확하게 작동하지 않지만 귀하의 구현은 그렇지 않다는 점을 지적하고 싶습니다 . 여기에 있는 버전에는 이 문제가 없습니다. 내 것도 인쇄물 앞에 추가되지만 이는 개인 취향의 문제입니다.cdcdDIRSTACKdirs

그래서 제가 말했듯이 저는 이러한 별칭을 항상 사용하고 있으며 아무런 문제가 없습니다. 다른 기계를 사용해야 하는데 거기에 없다는 사실을 알게 되면 약간 실망스러울 수 있습니다. (놀랍지도 않지만 너무 자주 사용해서 생각하지 못하는 기계 중 하나입니다.) 그러니 예전처럼 일하지 않도록 하세요. 여전히 놀랄 수 있습니다.

답변2

이것은 질문에 대한 직접적인 대답은 아니지만 4DOS의 디렉터리 기록 창에 반했습니다. 저는 Linux(및 Cygwin)용 버전을 직접 작성했습니다. 나는 그것을 설치하기 쉬운 유틸리티로 만들지 못했지만 Bash 프롬프트에 대한 방법을 알고 있다면 그렇게해서는 안됩니다.저것달리기가 어렵습니다. 귀하의 질문에 영감을 받아 이것을 Git 저장소에 넣고 GitHub에 업로드하게 되었습니다.디렉토리 기록.

기본적으로 이는 모든 셸에서 디렉터리 변경 사항을 수집하는 데몬이자 기록을 표시하고 전환하려는 디렉터리를 선택할 수 있도록 하는 Cdk 프로그램입니다(따라서 스택에 제한되지 않음). 나는 그것이 매우 유용하다는 것을 알았고 4DOS처럼 Ctrl-PageUp에 연결했습니다. (저는 Ctrl-PageUp을 Bash로 보내도록 PuTTY를 패치하기도 했습니다.)

답변3

나에게는 pushd/popd/dirs가 거의 도움이 되지만 부족합니다. 그래서 저는 기본적으로 20개의 별칭 집합으로 구현된 "navd"라는 "래퍼"를 만들었습니다. (그 중 하나는 실제로 함수입니다.) 코드는 다음과 같으나 먼저 간략한 설명을 하겠습니다. ("navd"를 다른 사람의 컴퓨터에서 작업할 때 얻을 수 있는 이점 중 하나는 이를 "설치하지 않고도" 실행할 수 있다는 것입니다. 설치 옵션으로 bash 프롬프트에 "navd"를 구현하는 명령을 붙여넣기만 하면 됩니다. 해당 머신의 bash 세션 동안 navd는 파일 시스템에 공간을 전혀 제공하지 않지만 이는 임시 설치이므로 "실제" 설치(과정)를 위해 .bashrc에 이러한 명령을 넣습니다.

특징:

navd <path>;   -- will make that path the current dir AND will add it to the stack
                         AS A BONUS: If a relative path is used, this command is added to history
                         with an absolute path instead. This improves navigation even when only
                         using history ... because very often relative-path commands in history
                         are useless if the command changes the current directory. (After all, you
                         would have to be in the directory the command was originally issued
                         from in order for such a command to work correctly.)
navd           -- shows the stack, with index numbers for convenience
navd0          -- makes the first entry on the stack (read left-to-right) **the current dir**
navd1          -- makes the second entry on the stack (read left-to-right) **the current dir**
.
.
.
navd9          -- makes the tenth entry on the stack (read left-to-right) **the current dir**
navd-1         -- makes the first entry on the stack WHEN READ RIGHT-to-LEFT(!) **the current dir**
.                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
.
.
navd-9         -- makes the 9th entry on the stack WHEN READ RIGHT-to-LEFT(!) **the current dir**

19개의 navd<N> 명령 중 하나스택 회전이 디렉터리가 현재 디렉터리가 됩니다.반품이제 스택의 맨 앞에 표시됩니다. 양수 <N> 값은 색인이 0부터 시작하여 왼쪽부터 세어가는 디렉터리를 찾습니다. 음수 <N> 값은 -1부터 시작하는 인덱스를 사용하여 오른쪽부터 세는 디렉터리를 찾습니다. (이는 Java 및 기타 언어에서 배열 인덱싱이 사용되는 방식에 대한 규칙을 따릅니다.)

참고: 모든 "navd" 명령은 "pushd" 및 "dirs"에서 사용하는 것과 동일한 스택을 표시하지만 없이 표시합니다. 가장 왼쪽 항목"dirs"가 표시됩니다(항목이 실제로 스택에 없기 때문에 - 현재 디렉토리입니다). 그리고"dirs"로가장 왼쪽 항목cd 명령을 입력하면 변경됩니다). ("cd <path>" 명령은 navd의 동작에 영향을 주지 않습니다.행동에 영향을 미치긴 하지만푸시/디렉터리/팝d. 또한...저는 "return"을 위해 "cd -"를 사용하는 것을 좋아합니다.한 번방금 탐색한 디렉토리로 이동했으며 "cd -"는 navd의 동작에도 영향을 주지 않습니다. )

보너스: 스택을 회전하지 않고 dir을 스택에 표시된 위치로 변경하는 또 다른 19개의 별칭이 있을 수 있습니다.

 nav0 ... nav9   and   nav-1  ... nav-9

두 번째 보너스: "navh"는 기록에 navd <path> 명령을 표시하므로 잘라내기-붙여넣기를 통해 스택을 쉽게 로드할 수 있습니다. (각 항목은 기록에 여러 번 나타나더라도 한 번만 나열되며 목록이 정렬됩니다. 또한 해당 항목이 navh 목록에 표시되지 않도록 $HOME/.navhignore 파일에 항목을 배치할 수 있습니다.)

 navh

세 가지 주요 행동:

  1. 스택을 지우고 특정 "navd <path>" 명령을 반복하면 경로가 스택에 저장됩니다. 그것이 내가 원하고 기대하는 것입니다... 하지만 Pushd는 그렇게 하지 않습니다. 현재 탐색 중인 디렉터리를 스택에 넣습니다. 따라서 명령을 반복하면 스택에 미치는 영향은 가변적입니다(예측할 수 없는 것처럼 느껴집니다).

  2. "navd <path>"는 동일한 경로를 스택에 두 번 넣지 않습니다.

  3. "navd <path>"는 명령 기록에 포함됩니다.순수한경로 짝수비교적명령의 경로를 입력합니다.

나에게 설명된 마지막 세 가지 동작은 기록에서 "pushd <path>" 명령을 사용하는 것보다 기록에서 "navd <path>" 명령을 사용하는 것이 더 유용하다고 생각합니다. 나는 정말할 수 있는기록을 재사용하여 다른 장소로 이동하세요. 이렇게 하면 스택이 "깨지지" 않습니다.

이를 최대한 활용하고 싶다면 navd와 Pushd/dirs/popd 사용 간에 전환할 수 있습니다. 둘 다 동일한 스택을 사용합니다. 단지 스타일이 다를 뿐입니다. 예를 들어 "navd" 스택에서 콘텐츠를 제거하려면 "popd"를 사용하고, navd 스택을 지우려면 "dirs -c"를 사용합니다.

Pushd/dirs/popd를 "내 단계를 어떻게 되돌릴 수 있나요?"라고 생각하세요.
navd를 "즐겨찾는 디렉토리 세트를 유지하고 디렉토리 간에 쉽게 전환하려면 어떻게 해야 합니까?"라고 생각하십시오.

다음을 터미널 창에 붙여넣으면 해당 터미널 세션 중에 navd 사용을 즉시 시작할 수 있습니다. 이것이 이 함수의 모든 코드입니다.

# Add 1 function and many related aliases for something like "pushd", called "navd". http://unix.stackexchange.com/a/229161
# Think of pushd/dirs/popd as "how do I retrace my steps?".
# Think of navd as "how do I hold on to a set of favorite directories, and easily switch between them?".
# Pseudo-code to explain each part of the "navd" bash function just below:
#              If no arguments to the 'navd' command:
#                  If stack has entries, then print the stack one-line-per-dir with each line numbered.
#                  Else, if stack is empty, automatically run the equivalent of the navh command.
#              Else (there **are** arguments to the 'navd' command):
#                  If arg is '--help' or '/?' then show help.
#                  Else    (arg is assumed to be a path to a directory)
#                      Remember the directory we are starting at
#                      Change to dir given as argument (the "arg-dir"), and do a few chores:
#                      Do not use arg-dir literally ... instead, magically put the **absolute** path we arrived at into history.
#                      Set a flag if the arg-dir is already in the stack.
#                      If the flag is set then just show the stack (on one line), else ADD to stack, ROTATE to end-of-stack, and show the stack.
#                      Change to dir we started at and then back to the arg-dir. This allows "cd -" to go back to dir we started at.
#                  End-If
#              End-If
navd () {
    if [[ $1 == '' ]]; then                             #--no arguments to the 'navd' command
        if dirs +1 >/dev/null 2>&1; then                #------stack has entries
            dirs -p | perl -ne 'print (-1+$cn++); print "$_"' | grep -v "^-1";
        else                                            #------stack is empty
            echo "The navd stack is empty. Now running 'navh' in case that's helpful. navd --help works."
            if [[ ! -f $HOME/.navhignore ]]; then echo -n ''>>$HOME/.navhignore;fi;diff --new-line-format="" --unchanged-line-format="" <(history | perl -ne "if (m/^\s*\d+\s+navd [\"~.\/]/) {s/^\s*\d+\s+/  /;s/\/$//;print}" | sort -u) <(cat $HOME/.navhignore | sort -u);echo "cat $HOME/.navhignore # (Has "`grep -c . <(sort -u $HOME/.navhignore)`" unique lines.)"
        fi
    else                                                #--(there **are** arguments to the 'navd' command)
        if [[ $1 == '--help' || $1 == '/?' ]]; then     #------arg is '--help' or '/?'
            echo "The 'navd' functionality is nothing but one bash function and a set of aliases."
            echo "It offers a different style of handy directory navigation than pushd/popd."
            echo "It uses the same 'stack' as pushd. Look in the .bashrc file for details."
            echo "    (Think of pushd/dirs/popd as 'how do I retrace my steps?'."
            echo "     Think of navd as 'how do I remember a set of favorite directories,"
            echo "     and easily switch between them?'.)"
            echo "As of 10/2015, this link has more info: http://unix.stackexchange.com/a/229161"
            echo "Here is the set of navd-related aliases. None need any parameter:"
            alias | grep 'alias nav' | cut -d= -f1 | grep -v '-' | grep -v 'navh'
            alias | grep 'alias nav' | cut -d= -f1 | grep '-'
            echo "alias navh  # The 'navh' alias has nothing to display until a 'navd <path>' is run. Short for nav-history."
            echo "---- To get started, simpy type navd followed by your favorite path. ----"
            echo "---- navd with no param shows stack. nav0 navigates to first on stack. ----"
        else                                            #------(arg is assumed to be a path to a directory)
            mypwd="$PWD"
            cd "$1" >/dev/null;
            history -s `echo "$PWD" | perl -pe 's/$ENV{'HOME'}/~/;s/ /\\\\ /g;s/^/navd /'`
            myflag=`dirs -p | perl -pe 's/\n/:/' | perl -ne '@a=split(":");$pwd=shift(@a);$flag=0;foreach (@a) {if ($_ eq $pwd) {$flag=1}};print $flag'`
            if [[ $myflag == 1 ]]; then dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"; else pushd .>/dev/null; pushd +1>/dev/null; dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"; fi
            cd "$mypwd"; cd "`dirs -l -0`"
        fi
    fi
};
# Aliases for navigating and rotating the "pushd" stack in the style of "navd":
alias navd0='cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"' # "-l" is dash-L, and expands "~" to denote the home dir. Needed inside back-ticks.
alias navd1='cd "`dirs -l +1`";pushd -n +1;cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd2='myd=$PWD;cd "`dirs -l +1`";for i in {1..2};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd3='myd=$PWD;cd "`dirs -l +1`";for i in {1..3};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd4='myd=$PWD;cd "`dirs -l +1`";for i in {1..4};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd5='myd=$PWD;cd "`dirs -l +1`";for i in {1..5};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd6='myd=$PWD;cd "`dirs -l +1`";for i in {1..6};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd7='myd=$PWD;cd "`dirs -l +1`";for i in {1..7};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd8='myd=$PWD;cd "`dirs -l +1`";for i in {1..8};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd9='myd=$PWD;cd "`dirs -l +1`";for i in {1..9};do pushd -n +1>/dev/null;cd "`dirs -l +1`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-1='cd "`dirs -l -0`";pushd -n -0>/dev/null; dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-2='myd=$PWD;cd "`dirs -l -0`";pushd -n -0>/dev/null;cd "`dirs -l -0`";pushd -n -0>/dev/null;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-3='myd=$PWD;cd "`dirs -l -0`";for i in {1..3};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-4='myd=$PWD;cd "`dirs -l -0`";for i in {1..4};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-5='myd=$PWD;cd "`dirs -l -0`";for i in {1..5};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-6='myd=$PWD;cd "`dirs -l -0`";for i in {1..6};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-7='myd=$PWD;cd "`dirs -l -0`";for i in {1..7};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-8='myd=$PWD;cd "`dirs -l -0`";for i in {1..8};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias navd-9='myd=$PWD;cd "`dirs -l -0`";for i in {1..9};do pushd -n -0>/dev/null;cd "`dirs -l -0`";done;cd "$myd";cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
# BONUS commands (beyond the 20). Aliases for navigating but NOT rotating the "navd" stack:
#      Help in remembering: "navd<#>" does more since it both changes the PWD and rotates the stack, whereas "nav<#>" does less
#            (and has one letter less) since "nav<#>" only changes the PWD. Also "navd<#>" acts like the pushd-related command: dirs
#      There is no "nav" command (with no number) so that there will be no conflict if any program called "nav" is used.
alias nav0='cd "`dirs -l +1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav1='cd "`dirs -l +2`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav2='cd "`dirs -l +3`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav3='cd "`dirs -l +4`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav4='cd "`dirs -l +5`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav5='cd "`dirs -l +6`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav6='cd "`dirs -l +7`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav7='cd "`dirs -l +8`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav8='cd "`dirs -l +9`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav9='cd "`dirs -l +10`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-1='cd "`dirs -l -0`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-2='cd "`dirs -l -1`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-3='cd "`dirs -l -2`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-4='cd "`dirs -l -3`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-5='cd "`dirs -l -4`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-6='cd "`dirs -l -5`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-7='cd "`dirs -l -6`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-8='cd "`dirs -l -7`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
alias nav-9='cd "`dirs -l -8`";dirs -p | perl -ne "chomp;s/$/ /;print unless ++\$cn==1"'
# BONUS command (beyond the 20). Alias for showing 'history' of all navd commands that add to the stack.
#                Can be used in a new terminal session to quickly add recently used dirs to the navd stack.
alias navh='if [[ ! -f $HOME/.navhignore ]]; then echo -n ''>>$HOME/.navhignore;fi;diff --new-line-format="" --unchanged-line-format="" <(history | perl -ne "if (m/^\s*\d+\s+navd [\"~.\/]/) {s/^\s*\d+\s+/  /;s/\/$//;print}" | sort -u) <(cat $HOME/.navhignore | sort -u);echo "cat $HOME/.navhignore # (Has "`grep -c . <(sort -u $HOME/.navhignore)`" unique lines.)"'
# Note: When 'navd <relative-path>' is used, then by bash-magic the navd command puts 'navd <absolute-path>' into history,
#       instead. This allows the output of "navh" to be useful regardless of the directory that is current when it is run.
#
# BONUS commands (beyond the 20). An even shorter alias for navd. An even shorter alias for navh.
alias nd='navd'
alias nh='if [[ ! -f $HOME/.navhignore ]]; then echo -n "">>$HOME/.navhignore;fi;diff --new-line-format="" --unchanged-line-format="" <(history | perl -ne "if (m/^\s*\d+\s+navd [\"~.\/]/) {s/^\s*\d+\s+/  /;s/\/$//;print}" | sort -u) <(cat $HOME/.navhignore | sort -u);echo "cat $HOME/.navhignore # (Has "`grep -c . <(sort -u $HOME/.navhignore)`" unique lines.)"'

이러한 별칭은 "bash" 명령을 기반으로 합니다. "cd -"의 정상적인 동작을 유지하려면 특별한 주의가 필요합니다. (저는 Pushd나 navd 대신에 "cd -"를 사용하는 경우가 많습니다. 왜냐하면 "cd -"는 사용자가 있었던 마지막 "위치"로 돌아가거나 두 위치 사이를 전환하는 데 매우 편리하기 때문입니다. 모든 로컬 사용, 설치 필요 없음).

물론 이러한 명령을 .bashrc 파일에 넣어 보다 영구적으로 설치할 수 있습니다.

답변4

여러분이 좋아할 만한 또 다른 솔루션이 있습니다. @cjm 님의 솔루션을 이용해서 이 글을 작성했습니다. dirs의 출력에서 ​​ncurses 유형 메뉴를 생성하기 위해 대화 상자 명령을 사용합니다. 항목을 선택하면 해당 디렉터리가 스택의 맨 위로 이동되고 해당 디렉터리로 들어갑니다. 디렉토리 기록과 비교할 때 이는 각 터미널 에뮬레이터에 고유한 디렉토리 기록 버퍼를 제공하는 이점이 있으며 설치가 조금 더 쉽습니다.

설치: CD 별칭을 Pushd로 설정한 후 대화 상자를 설치한 다음 bashrc에 이 기능을 넣습니다.

dirmenu(){
    dirIter=$(dialog --backtitle 'dirmenu' --clear --cancel-label "Exit" --menu "Please select:" 0 0 0 $(dirs) 3>&2 2>&1 1>&3)
    cmd="builtin cd ~$dirIter"
    eval $cmd
}

나는 dirs -v를 실행한 다음 다른 명령을 실행하여 원하는 디렉터리로 pop하거나 cd하는 것보다 이 방법을 선호합니다. 대화 상자 메뉴는 해당 대화 상자를 통해 고도로 사용자 정의할 수도 있습니다.

따라서 귀하의 질문에 대답하려면 예, Pushd를 CD에 별칭으로 지정하는 것이 좋은 생각이라고 생각합니다. 정기적으로(적어도 업데이트를 위해) 컴퓨터를 다시 시작하면 버퍼 오버플로 문제가 발생할 가능성이 줄어듭니다. 스크립트를 작성할 때 cd를 사용하는 데는 주의가 필요하지만 while 루프에서 cd를 사용하면 버퍼 오버플로 문제가 발생할 수 있습니다. dirs/pushd 버퍼 크기를 제어하는 ​​것이 무엇인지 잘 모르겠습니다.

관련 정보