cd'yi itme yerine takma - iyi bir fikir mi?


35

Aşağıdaki takma adı kullanmak iyi bir fikir midir:

cd() {
    pushd $1;
}

bash olarak mı?

Bunun çok yararlı olacağını düşünüyorum, çünkü daha sonra popdsadece bir cd -kez yerine bir dizi s kullanabilirim .

Bunun bir problem olabileceği bir durum var mı?


2
Zsh'de bunun için bir ayar olduğunu biliyorum. Ne olduğundan emin değilim. Sadece yerine bir işlev yapmak gerekli alias cd=pushdmidir?
Falmarri

2
İşlevin diğer adı ikinci olur.
alesplin

1
Neden bunun yerine yeni bir ad takma değil. Ne dersiniz pd? Sisteminizin tek kullanıcısı ve yöneticisi siz misiniz?
Kevin Cantu

3
@Falmarri zsh seçeneği şudurautopushd
Michael Mrozek

1
Açıkçası, bu bir işlevdir, bir takma isim değil (ama hepsi daha iyi).
üçlü

Yanıtlar:


39

Şahsen ben bunları bashrc'imde tutuyorum ve her zaman kullanıyorum:

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'

Daha sonra bir tarayıcı gibi biraz komut satırında gezinebilirsiniz. cddizini değiştirir. backgirdiğiniz önceki dizine gider cd. Ve flipşimdiki ve önceki dizinler arasında dizini yığından çıkarmadan hareket edecek. Genel olarak, harika çalışıyor.

Farkında olduğum tek gerçek sorun, daha sonra tamamen alışkın olduğum ancak başkasının makinesinde bulunmayan bir dizi komutun olması. Yani, başka birinin makinesini kullanmak zorunda kalırsam, biraz sinir bozucu olabilir. Yalnızca kullanmaya pushdve popddoğrudan kullanmaya alışkınsanız, bu sorunu yaşamazsınız. Ve eğer sadece takma isim cdkoymazsanız popd, var backolmama sorununu cdyaşamayacaksınız, diğer makinelerde beklediğiniz şeyi yapmayan bir problem yaşamayacaksınız.

Bununla birlikte, kendi uygulamanızın , normalin kendi ana dizininize gideceği cdgibi çalışmadığını cdve cdsizinki çalışmadığını unutmayın. Burada sahip olduğum sürümde bu sorun yok. Benimki de çıktının DIRSTACKönüne ekliyor dirs, ama bu kişisel zevk meselesi değil her şeyden çok.

Dediğim gibi, bu takma adları her zaman kullanırım ve onlarla hiçbir sorunum yok. Sadece başka bir makine kullanmak ve daha sonra onları orada bulmak zorunda kalmak biraz sinir bozucu olabilir (şaşırtıcı olmamalıdır, ancak onlar hakkında çok fazla düşünmeyeceğiniz sık sık kullandığınız şeylerden biri) , bu yüzden onları alıştığınız gibi çalışmalarını sürdürmek hala şaşırtıcı olabilir).


Mükemmel tavsiye! Vi / Vimperator kullanıcıları otantik deneyim <C-o>için popdiçin yapılandırabilir .
unperson325680

1
@ progo, çevirme dizininin yığın dizinden patlamasıyla nasıl değişeceğini açıklayabilir misiniz?
Jonathan.

Zsh configs 'e alışmaya başladığınızda, bu eksik: (1) dirstack'taki öğelerin tekilleştirilmesi ve (2) dirstack'ta direkte bulunan bir öğeye doğrudan cd koymanın yolları. Bunları uygulamak için kolayca sarmalayıcılar yazabileceğimi düşünüyorum ... Ne yazık ki bash DIRSTACK'inin değiştirilmesine izin verilmiyor, bu yüzden dupes sadece kalmalı.
Steven Lu

Lütfen dir temizlemek için net ekler misiniz?
Pasupathi Rajamanickam

7

Bu soruya doğrudan bir cevap değil ama 4DOS'taki dizin geçmişi penceresine aşık oldum. Öyle ki Linux (ve Cygwin) için kendi versiyonumu yazdım. Kurulumu kolay bir yardımcı program yapmak için hiç bu kadar başarılı olamadım, ancak Bash isteminde yolunuzu biliyorsanız, koşması o kadar zor olmamalı . Sorunuz, Git deposuna koymam ve GitHub: dirhistory'ye yüklemem için bana ilham verdi .

Temel olarak, tüm kabuklarınızdaki dizin değişikliklerini toplayan bir servistir ve geçmişi görüntüleyen ve geçmek üzere herhangi bir dizini seçmenize izin veren bir Cdk programıdır (böylece bir yığınla sınırlı kalmazsınız). Gerçekten yararlı buluyorum ve 4DOS gibi Ctrl-PageUp'a bağlı olmasını sağladım. (PuTTY'yi bile ekledim, böylece Bash'e Ctrl-PageUp gönderdi.)


0

Benim için pushd / popd / dirs yakın yardımcı olur, ancak eksik. Bu yüzden, temelde 20 takma ad olarak uygulanan 'navd' adı verilen bir 'sarmalayıcı' oluşturdum. (Bunlardan biri gerçekten bir işlevdir.) Kod aşağıdadır, ancak ilk önce kısa bir açıklama. ("Navd" ve diğer insanların makinelerinde çalışmakla ilgili hoş bir şey: "Çalıştırmamak" şeklinde çalışan bir program vardır: Bir kurulum seçeneği olarak, bash komut istemine "navd" komutunu kolayca girebilirsiniz. , ve o makine oturumu için bu bash-oturumu süresince işe yarar. Bu, dosya sisteminde sıfır ayak izi verir, ancak geçici bir kurulumdur. Bu komutları .bashrc'ye "gerçek" bir kurulum için koyun. elbette.)

Özellikleri:

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**

Ondokuzuncu navd <N> komutundan herhangi biri yığını döndürür, böylece geçerli dizin haline gelen dizin artık yığının önünde de görüntülenir. Pozitif <N> değerleri, indeksleme sıfırdan başlayarak soldan sayılan bir direk bulur. Negatif <N> değerleri, RIGHT'den sayılan bir dizin bulur ve indeksleme -1 ile başlar. (Bu, dizi dizinlerinin Java ve diğer dillerde nasıl kullanılabileceği konvansiyonunu takip eder.)

Not: Herhangi bir "navd" komutu "pushd" ve "dirs" öğelerinin kullandığı yığının aynısını görüntüler - ancak "dirs" öğesinin görüntüleyeceği en soldaki girişi OLMADAN görüntüler (bu giriş gerçekten yığında olmadığından - Geçerli dizin ve bir cd komutu girildiğinde en soldaki giriş değiştirilen "dirs" ile ). ("Cd <path>" komutu herhangi bir navd davranışını etkilemez, ancak kesinlikle pushd / dirs / popd davranışını etkiler . Ayrıca ... "cd -" komutunu bir kez "geri" almak için kullanmayı seviyorum. dizinden yeni çıktım ve "cd -" de navd davranışını etkilemiyor.)

Bonus: Yığını döndürmeyen, ancak yalnızca yığını belirtilen yere yönlendiren 19 ad diğer adı olabilir.

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

2. Bonus: "navh", cut-n-paste ile yığını kolayca yüklemek için tarihe ait navd <path> komutlarını gösterir. (Her biri bir defada olsa bile bir kez listelenir ve liste sıralanır. Ayrıca, bu girdilerin navh listesinde görünmesini engellemek için girdiler bir $ HOME / .navhignore dosyasına yerleştirilebilir.)

 navh

Üç anahtar davranış:

  1. Yığını temizler ve belirli bir "navd <path>" komutunu tekrarlarsanız, bu yol yığına gider. İstediğim ve beklediğim şey bu… ama pushd bunu yapmıyor - şu anki dolabı yönlendirdiğiniz mevcut dizini yığının üzerine koyuyor - böylece yığının üzerindeki etki, komutu tekrarladığınızda değişken (tahmin edilemez) oluyor .

  2. "navd <path>", aynı yolu yığına iki kez koyamaz.

  3. "navd <path>" , göreli yol komut için girilmiş olsa bile mutlak yolla komut geçmişine koyar .

Benim için tarif edilen son üç davranış, tarihteki bir "navd <path>" komutunun kullanılmasından çok daha faydalıdır. Gerçekten olabilir yerlere gitmek tarihini yeniden kullanabilir. Ve bunu yaptığımda yığımı "bozmuyorum".

Beyninizi etrafına sarabilir ve sarmak isterseniz, nav ve pushd / dirs / popd komutları arasında geçiş yapabilirsiniz. Her ikisi de aynı yığını kullanır; Sadece farklı bir stille. Örneğin, "navd" yığından bir şey çıkarmak için "popd" kullanın veya navd yığınını temizlemek için "dirs -c" kullanın.

Pushd / dirs / popd aygıtını "adımlarımı nasıl takip ederim?" Olarak düşünün.
Navd'u "bir dizi favori dizini nasıl tutacağım ve kolayca aralarında geçiş yapabilirim?" Olarak düşünün.

Aşağıdakileri bir terminal penceresine yapıştırın ve hemen bu terminal oturumu süresince navd kullanmaya başlayabilirsiniz. Bu, bu özelliğin tüm kodu.

# 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.)"'

Bu takma adlar "bash" komutlarına dayanır. "Cd -" nin normal davranışını korumak için özel dikkat gösterilmektedir. (Çoğu zaman pushd veya navd ile uğraşmak yerine "cd -" kullanıyorum - çünkü "cd -" bulunduğunuz son "yere" geri dönmek için ya da sadece 2 yer arasında geçiş yapmak için çok kullanışlıdır ve kurulum yapmadan her yerde çalışır.)

Bu komutlar, elbette, daha kalıcı bir kurulum için .bashrc dosyasına eklenebilir.


1
Dana, aynı isimde iki ayrı hesaba sahipsin. Onları oldukça kolay bir şekilde birleştirebilirsiniz .
roaima

Her dizini değiştirdiğinde bir perl yorumcusu mu döndürüyorsun? Hayır teşekkürler.
Tripp Kinetics

0

İşte beğenebileceğiniz başka bir çözüm. Bunu cjm'in çözümüyle oynadıktan sonra yazdım. Dizin çıkışından bir ncurses tipi menüsü oluşturmak için dialog komutunu kullanır. Bir öğe seçmek, bu dizini yığının üstüne getirir ve içine cd gelir. Bu, her bir terminal emülatörüne kendi dizin geçmişi arabelleğini verme ve kurulumu biraz daha kolay olma yönünden bir avantaj sağlar.

Yüklemek için: Bir kez cd'yi basmak için taktıktan sonra, iletişim kutusunu kurun, sonra sadece bu işlevi bashrc'nize koyun:

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
}

Bu, dirs -v komutunu çalıştırmaktan biraz daha iyi, sonra istediğim dizine pop veya cd yapmak için başka bir komut çalıştırarak. Diyalog menüleri ayrıca kendi dialogrc yoluyla özelleştirilebilir.

Bu yüzden sorunuzu cevaplamak için, evet, cd'ye takma ad vermenin harika bir fikir olduğunu düşünüyorum. En azından güncellemeler için makinenizi düzenli olarak yeniden başlatıyorsanız, arabellek taşması sorunlarıyla karşılaşmanız olası değildir. Script yazarken cd kullanırken dikkatli olsam da; Bir süre içerisinde cd, potansiyel olarak arabellek taşması sorunlarına neden olabilir. Ne dirs / pushd arabellek boyutunu kontrol emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.