'Cd' komutunun giriş dizinine gitmesini nasıl önleyebilirim?


10

Mesele şu ki bazen cdyanlışlıkla yazıyorum ve bu beni ana dizine götürüyor.

Örneğin, gizli bir dizini ve görünür bir dizini olan bir dizindeyim, cd+ tuşuna hızlıca basıyorum tabve bu beni ana dizine götürüyor


30
cdKazara bir yerde iseniz cd -, önceki konumunuza dönmek için kullanın - bash $OLDPWDdeğişkeni bu amaçla tutar . Bkz. Gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman

4
Gerçekten cdhiçbir şey yapmak istemiyorsanız , cdhiçbir argüman belirtilmediğinde hiçbir şey yapmayan bir işlev yazabilirsiniz , aksi takdirde arayınbuiltin cd "$@"
glenn jackman

2
Gerçekten kötü bir fikir: HOME =.
Joshua

26
En iyi tavsiyem, komutu yürütmeden önce yavaşlamak ve kontrol etmeyi öğrenmek. Başka bir deyişle: cdne yaparsa yapsın. Çift kontrol etmediğiniz komutları yürütme alışkanlığını sürdürürseniz, daha sonra daha büyük sıkıntılarla karşılaşırsınız. Örneğin, iki dosyayı üçüncü bir dizine taşımak istiyorsunuz: mv a b dir/SEKME tamamlama işlemi dirbeklediğiniz gibi üretilmiyorsa mv a b, üzerine yazılan işlemleri gerçekleştireceksiniz b. Dikkatli olmayı öğrenin, Enter tuşuna basmadan önce komuta bakmayı öğrenin.
egmont

1
@Joe ben bir sarıcı betik yazdım rmgibi üst düzey dizinleri silme önlemek için /, /etc, /usr, /home, /varbir şifre geçersiz kılma olmadan, vb. Bazen kendimizden korunmaya ihtiyacımız var :)
WinEunuuchs2Unix

Yanıtlar:


14

gedit ~/.bashrcAşağıdaki satırları kullanın ve altına ekleyin:

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}

Yeni bir terminal açın ve şimdi cdhiçbir parametre olmadan yazdığınızda aynı dizinde kalırsınız.


TL; DR

Gerçekten ayrıntılı olmak istiyorsanız, hiçbir parametre iletilmediğinde bir yardım ekranına koyabilirsiniz:

$ cd

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

Bunu gerçekleştirmek için genişletilmiş kod:

cd() {
    if [[ $# -eq 0 ]] ; then
        cat << 'EOF'

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

EOF
        return
    fi

    builtin cd "$@"
}

6
Ama sonra ortamınızı başka bir ortam gibi çalıştırmadınız. Neden işlevi ncd("Yeni cd" için) çağırmıyor ve gerçek cdyalnız bırakmıyoruz?
vals

@waltinator Cevabı cd , ev kullanıcısı dışında insanlar için (boş) nasıl farklı çalıştığına dair bir uyarı ile geliştirebilirim ~/.bashrc. Dikkat etmeniz gereken bir iki örnek verebilir misiniz? Örneğin, bir geliştirici cd kurulum betiğinde (boş) kullanır . (Varsayımsal ama bir dava düşünemiyorum). Ben senin cevap cevaplayabilir ve OP ncdyerine her zaman kullanmanızı öneririz cd.
WinEunuuchs2Unix

Bir şeyleri özelleştirmeyi seviyorum. Linux bununla ilgili. Ama herhangi bir ortak komutun işlevini asla değiştirmemek için kesin bir kişisel kuralım var. Bu, başka bir sistemde çalışırken veya başka biri üzerinde çalışırken veya size kendiniz tavsiyede bulunduğunda sorunlara yol açar. @Waltinator ve diğer "iyi" Joe ile katılıyorum
Joe

6

Buna neden olan sekme tamamlama ise, seçeneklerden biri girişler arasında hemen geçiş yapmaktır. Bu , varsayılan yerine readline'ınmenu-comple seçeneği kullanılarak yapılabilir complete:

bind 'tab: menu-completion'

Sonra, ana dizinimde, örneğin:

$ cd <tab> # becomes
$ cd .Trash

Tabii ki, o zaman bile yürüttüğünüzü okumak zorunda kalacaksınız.


4

Geçerli dir ve kullanıcı windows başlığımı koymak nasıl - İhtiyacınıza adapte edebilirsiniz, ama cd -eşdeğer cd $OLDPWDdaha iyi bir çözüm.

Gönderen ~/.bashrc:

# from the "xttitle(1)" man page - put info in window title
update_title()
{
    [[ $TERM = xterm ]] || [[ $TERM = xterm-color ]]  && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}

cd()
{
    [[ -z "$*" ]] && builtin cd $HOME
    [[ -n "$*" ]] && builtin cd "$*"
    update_title
}

4

Buradaki sorun değil cdve teknoloji tarafından düzeltilmiyor.

Sorun sensin ve bu sabırla giderildi!

Sık sık istemediğiniz komutları yazarken ve gönderdiğinizde yavaşlama alıştırması yapın . Nefes alın, ne yazdığınızı okuyun ve enter tuşuna basmadan önce iki kez kontrol edin. Bir düşünün. Acele etme.

Bu yaklaşımın sadece eldeki sorunu çözmekle kalmayıp , mevcut yolunuza devam ederseniz karşılaşacağınız diğer daha kötü sorunları da bulacaksınız.


2
ayrıca, birkaç ay / yıl kullanımdan sonra, davranışı değiştirdiğinizi ve diğer ortamlarda çalışmakla ilgili sorunlarınız olduğunu unutacaksınız.
pLumo

@RoVo Bu da iyi bir nokta!
Yörüngedeki Hafiflik Yarışları

@RoVo Bu birkaç gün içinde olabilir. Hemen, çift önyükleme yaparsanız, bir
Joe

@Joe Son zamanlarda gündüz OSX ve akşam Windows arasında geçiş yapıyorum ve klavye düzeni değişikliği gerçekten kafa karıştırıcı!
Yörüngedeki Hafiflik Yarışları

@LightnessRacesinOrbit Eminim! Neredeyse aynı düzene sahip iki farklı boyutlu dizüstü bilgisayar klavyem var ve bu yeterince kötü. Bu yüzden hiç Dvorak klavye denemedim. Bunun soru ile nasıl ilgili olduğundan emin değilim.
Joe
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.