it-swarm-ko.tech

cd를 pushd로 앨리어싱-좋은 생각입니까?

다음 별칭을 사용하는 것이 좋은 생각입니까?

cd() {
    pushd $1;
}

bash에서?

cd -를 한 번만 사용하는 대신 일련의 popds를 사용할 수 있으므로 매우 유용 할 것 같습니다.

이것이 문제가 될 수있는 경우가 있습니까?

37
Lazer

개인적으로 나는 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는 사용자가 cded 한 이전 디렉토리로 이동합니다. 그리고 flip은 디렉토리 스택에서 팝하지 않고 현재 디렉토리와 이전 디렉토리 사이를 이동합니다. 전반적으로 훌륭하게 작동합니다.

내가 아는 유일한 진짜 문제는 내가 완전히 익숙하지만 다른 사람의 컴퓨터에 존재하지 않는 일련의 명령이라는 사실입니다. 따라서 다른 사람의 컴퓨터를 사용해야한다면 다소 실망 스러울 수 있습니다. pushdpopd을 직접 사용하는 데 익숙하다면 그 문제가 없습니다. 그리고 별칭 만 cdpopd이 아닌 것으로 입력하면 back 문제가 존재하지 않지만 cd는 다른 컴퓨터에서 예상 한대로 수행하지 않습니다.

그러나 cd의 특정 구현은 일반 cd 자체가 홈 디렉토리로 이동한다는 점에서 cd처럼 작동하지 않습니다. 하지 않습니다. 여기에있는 버전에는 문제가 없습니다. 내 것은 또한 DIRSTACK 인쇄물의 앞면에 dirs를 추가하지만, 그것은 무엇보다 개인적인 취향의 문제입니다.

그래서 제가 말했듯이, 저는이 별칭을 항상 사용하며 아무런 문제가 없습니다. 다른 기계를 사용하고 거기에없는 기계를 찾아야하는 것은 약간 실망 스러울 수 있다는 것입니다 (놀랍지는 않지만 자주 사용하는 것 중 하나이므로 생각하지 않아도됩니다. , 따라서 익숙한 것처럼 작동하지 않는 것은 여전히 ​​놀랄 수 있습니다).

41
Jonathan M Davis

이것은 질문에 대한 직접적인 대답은 아니지만 4DOS의 디렉토리 기록 창에 빠졌습니다. 그래서 저는 Linux (및 Cygwin) 용 버전을 직접 작성했습니다. 나는 그것을 설치하기 쉬운 유틸리티로 만들어 본 적이 없지만 Bash Prompt에 대해 알고 있다면 that 달리기가 어렵다. 귀하의 질문에 영감을 받아 Git 저장소에 넣고 GitHub에 업로드하십시오 : dirhistory .

기본적으로 모든 셸에서 디렉터리 변경 사항을 수집하는 데몬과 기록을 표시하고 전환 할 디렉터리를 선택할 수있는 Cdk 프로그램입니다 (따라서 스택에 국한되지 않음). 나는 그것이 정말 유용하다고 생각하고 4DOS처럼 Ctrl-PageUp에 바인딩했습니다. (PuTTY를 패치하여 Ctrl-PageUp을 Bash로 보냅니다.)

7
cjm

나를 위해 pushd/popd/dirs는 거의 도움이되지만 부족합니다. 그래서 본질적으로 20 개의 별칭 집합으로 구현 된 'navd'라는 '래퍼'를 만들었습니다. (그중 하나는 실제로 함수입니다.) 코드는 아래에 있지만 여기에 먼저 간단한 설명이 있습니다. ( "navd"와 다른 사람의 컴퓨터에서 작업하는 것에 대한 한 가지 좋은 점 : "no-install"형태의 실행이 있습니다. 하나의 설치 옵션으로 bash-Prompt에서 "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에서 시작하는 인덱싱으로 왼쪽에서 dir 계산을 찾습니다. 음수 <N> 값은 -1에서 시작하는 인덱싱으로 RIGHT에서 dir 계산을 찾습니다. (이는 Java 및 기타 언어에서 배열 인덱스를 사용할 수있는 방법에 대한 규칙을 따릅니다.)

참고 : 모든 "navd"명령은 "pushd"및 "dirs"가 사용하는 것과 동일한 스택을 표시하지만 가장 왼쪽에있는 항목없이 표시합니다 "dirs"가 표시되는 항목 이후 실제로 스택에 있지 않습니다-현재 디렉토리 and가장 왼쪽 항목 cd 명령을 입력하면 변경됨). ( "cd <path>"명령은 navd의 동작에 영향을주지 않습니다 .물론 동작에 영향을줍니다 pushd/dirs/popd. 또한 ... "cd-"를 사용하여 go "back"once 방금 이동 한 디렉토리로 이동하면 "cd-"도 navd의 동작에 영향을주지 않습니다.)

보너스 : 스택을 회전하지 않는 별칭이 19 개 더있을 수 있지만 스택에 표시된 위치로 디렉토리 만 변경할 수 있습니다.

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

두 번째 보너스 : "navh"는 기록에서 navd <path> 명령을 보여 주므로 cut-n-paste로 스택을 쉽게로드 할 수 있습니다. (기록에 여러 번 있더라도 각 항목은 한 번만 나열되며 목록이 정렬됩니다. 또한 항목을 $ HOME/.navhignore 파일에 넣어 정확한 항목이 navh 목록에 나타나지 않도록 할 수 있습니다.)

 navh

세 가지 주요 동작 :

  1. 스택을 지우고 특정 "navd <path>"명령을 반복하면 해당 경로가 스택으로 이동합니다. 그것이 내가 원하고 기대하는 것입니다 ...하지만 pushd는 그렇게하지 않습니다 .- 현재 경로를 스택에 넣습니다. 따라서 명령을 반복하면 스택에 미치는 영향이 가변적입니다 (예측할 수없는 느낌). .

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

  3. "navd <path>"는 absolute 경로가있는 명령 기록에 relative = 명령에 대한 경로가 입력되었습니다.

나에게 설명 된 마지막 세 가지 동작은 기록에서 "navd <path>"명령을 사용하는 것이 기록에서 "pushd <path>"를 사용하는 것보다 훨씬 더 유용합니다. 나는 정말로 can 장소를 가기 위해 역사를 재사용한다. 그리고 그렇게 할 때 스택을 "손상"하지 않습니다.

당신이 할 수 있고 당신의 두뇌를 감싸고 싶다면 navd와 pushd/dirs/popd 사용 사이를 전환 할 수 있습니다. 둘 다 동일한 스택을 사용합니다. 다른 스타일로. 예를 들어, "popd"를 사용하여 "navd"스택에서 항목을 제거하거나 "dirs -c"를 사용하여 navd 스택을 지 웁니다.

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-"는 마지막 "장소"로 돌아가거나 2 곳만 전환 할 때 매우 편리하기 때문입니다. 설치없이 어디서나 작동합니다.)

물론 이러한 명령은보다 영구적 인 설치를 위해 .bashrc 파일에 넣을 수 있습니다.

1
Dana Forsberg

여기에 또 다른 솔루션이 있습니다. @cjm의 솔루션을 가지고 놀면서 이것을 썼습니다. dirs의 출력에서 ​​ncurses 유형 메뉴를 생성하기 위해 dialog 명령을 사용합니다. 항목을 선택하면 해당 디렉토리가 스택의 맨 위로 이동하여 CD로 이동합니다. 이것은 각 터미널 에뮬레이터에 자체 디렉토리 기록 버퍼를 제공하고 설치하기가 약간 더 쉽다는 dirhistory보다 이점이 있습니다.

설치하려면 : 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를 실행하는 것보다 조금 더 낫다. 그리고 나서 다른 명령을 실행하여 내가 원하는 디렉토리로 팝하거나 cd한다. 대화 메뉴는 또한 dialogrc를 통해 고도로 사용자 정의 할 수 있습니다.

따라서 귀하의 질문에 대답하려면 예, 앨리어싱을 cd로 푸시하는 것이 좋은 생각이라고 생각합니다. 적어도 업데이트를 위해 정기적으로 컴퓨터를 재부팅하는 경우 버퍼 오버플로 문제가 발생할 가능성이 거의 없습니다. 비록 스크립팅 할 때 cd 사용에주의를 기울일 것입니다. while 루프의 cd는 잠재적으로 버퍼 오버플로 문제를 일으킬 수 있습니다. dirs/pushd 버퍼 크기를 제어하는 ​​것이 무엇인지 잘 모르겠습니다.

0
Overdr0ne