Jak zapobiec przechodzeniu komendy „cd” do katalogu domowego?

10

Chodzi o to, że czasami piszę cdprzez pomyłkę i to zabiera mnie do katalogu domowego.

np. jestem w katalogu, który ma ukryty katalog i widoczny katalog, szybko naciskam cd+ tabi to zabiera mnie do katalogu domowego

vinicius de novaes
źródło
30
Jeśli jesteś cdgdzieś przez przypadek, użyj przycisku, cd -aby wrócić do poprzedniej lokalizacji - bash zachowuje $OLDPWDzmienną w tym celu. Zobacz gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman
4
Jeśli naprawdę nie chcesz cdnic robić, możesz napisać funkcję o nazwie cd, która nic nie robi, gdy nie podano żadnych argumentów, w przeciwnym razie wywołajbuiltin cd "$@"
glenn jackman
2
Naprawdę zły pomysł: HOME =.
Joshua
26
Moim szczerym zaleceniem jest spowolnienie i nauczenie się sprawdzania polecenia przed jego wykonaniem. Innymi słowy: przyzwyczaj się do cdrobienia tego, co robi. Jeśli utrzymasz nawyk wykonywania poleceń, których nie sprawdziłeś dwukrotnie, później będziesz miał znacznie większe problemy. Np. Chcesz przenieść dwa pliki do trzeciego katalogu: mv a b dir/a uzupełnianie TAB nie generuje się dirzgodnie z oczekiwaniami, w końcu wykonasz mv a bnadpisywanie b. Naucz się uważać, zapoznaj się z poleceniem przed naciśnięciem klawisza Enter.
egmont
1
@Joe Napisałem skrypt otoki dla rmzapobiec kasowanie katalogów najwyższego poziomu, takich jak /, /etc, /usr, /home, /var, itd. Bez ręcznego hasłem. Czasami potrzebujemy ochrony przed sobą :)
WinEunuuchs2Unix

Odpowiedzi:

14

Użyj gedit ~/.bashrci wstaw te linie na dole:

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

Otwórz nowy terminal, a teraz, gdy piszesz cdbez parametrów, po prostu pozostajesz w tym samym katalogu.


TL; DR

Jeśli chcesz być naprawdę rozbudowany, możesz wyświetlić ekran pomocy, gdy nie zostaną przekazane żadne parametry:

$ 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'

Rozszerzony kod do osiągnięcia tego celu to:

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 "$@"
}
WinEunuuchs2Unix
źródło
6
Ale wtedy sprawiłeś, że twoje środowisko działa jak żadne inne środowisko. Dlaczego nie wywołać funkcji ncd(dla „New cd”) i zostawić prawdziwą w cdspokoju?
waltinator,
@waltinator Mogę poprawić odpowiedź z ostrzeżeniem o tym, jak cd (puste) działa inaczej dla osób innych niż domowy użytkownik ~/.bashrc. Czy możesz podać przykład, na który należy zwrócić uwagę? np. Deweloper używa cd (pusty) w swoim skrypcie instalacyjnym. (Hipotetyczne, ale nie mogę wymyślić przypadku). Mogę zebrać twoje przykłady w odpowiedź i zasugerować, żeby OP używał ncdcały czas zamiast cd.
WinEunuuchs2Unix
Uwielbiam dostosowywać rzeczy. Właśnie o to chodzi w Linuksie. Ale mam ścisłą osobistą zasadę, aby nigdy nie zmieniać funkcji (bez zamierzonej gry słów) jakichkolwiek popularnych poleceń. To otwiera problemy, gdy pracujesz w innym systemie lub gdy ktoś inny pracuje lub doradza ci w twoim. Zgadzam się z @waltinator i innym „dobrym” Joe
Joe
6

Jeśli przyczyną tego jest uzupełnianie tabulatorów, jedną z opcji jest natychmiastowe przejście przez kolejne wpisy. Można to zrobić za pomocą opcji readlinemenu-comple zamiast domyślnej complete:

bind 'tab: menu-completion'

Następnie w moim katalogu domowym, na przykład:

$ cd <tab> # becomes
$ cd .Trash

Oczywiście nawet wtedy będziesz musiał przeczytać, co wykonujesz.

muru
źródło
4

Oto jak umieściłem bieżący katalog i użytkownika w moim tytule systemu Windows - możesz go dostosować do swoich potrzeb, ale cd -odpowiednikiem cd $OLDPWDjest lepsze rozwiązanie.

Od mojego ~/.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
}
waltinator
źródło
4

Problem nie jest tutaj cdi nie jest rozwiązany przez technologię.

Problemem jesteś ty, a rozwiązuje go cierpliwość!

Jeśli często wpisujesz i przesyłasz polecenia, których nie chciałeś, poćwicz spowalnianie . Weź oddech, przeczytaj to, co piszesz i dwukrotnie sprawdź przed naciśnięciem Enter. Przemyśl to. Nie spiesz się.

Przekonasz się, że to podejście nie tylko rozwiązuje dany problem, ale także znacznie gorsze problemy , które napotkasz, jeśli będziesz podążał swoją obecną ścieżką.

Lekkość Wyścigi na orbicie
źródło
2
również po kilku miesiącach / latach użytkowania zapomnisz o tym, że zmieniłeś zachowanie i będziesz miał problemy z pracą w innych środowiskach.
pLumo,
@RoVo To też, dobra uwaga!
Wyścigi lekkości na orbicie
@RoVo Może się to zdarzyć za kilka dni. Od razu, jeśli uruchomisz podwójnie, przełącz się na maszynę wirtualną ...
Joe
@ Joe Ostatnio przełączam się między OSX w ciągu dnia a Windowsem wieczorem, a zmiana układu klawiatury jest naprawdę myląca!
Wyścigi lekkości na orbicie
@LightnessRacesinOrbit Jestem pewien! Mam dwie różnej wielkości klawiatury do notebooków o prawie takim samym układzie i to dość źle. Dlatego też nigdy nie próbowałem klawiatury Dvorak. Po prostu nie jestem pewien, jak to się ma do pytania.
Joe