Come posso impedire al comando 'cd' di andare alla home directory?


10

Il fatto è che a volte scrivo cdper errore e che mi porta alla home directory.

ad es. sono in una directory che ha una directory nascosta e una directory visibile, premo rapidamente cd+ tabe questo mi porta alla home directory


30
Se ti trovi cdda qualche parte per caso, usa cd -per tornare alla posizione precedente - bash mantiene la $OLDPWDvariabile per questo scopo. Vedi gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman,

4
Se davvero non vuoi cdfare nulla, puoi scrivere una funzione chiamata cdche non fa nulla quando non viene dato alcun argomento, altrimenti chiamabuiltin cd "$@"
glenn jackman

2
Davvero una cattiva idea: HOME =.
Giosuè,

26
La mia migliore raccomandazione sincera è quella di rallentare e imparare a controllare il comando prima di eseguirlo. In altre parole: abituati a cdfare qualunque cosa faccia. Se mantieni l'abitudine di eseguire comandi che non hai ricontrollato, ti imbatterai in problemi molto più grandi in seguito. Ad esempio, vuoi spostare due file in una terza directory: mv a b dir/e il completamento della TAB non produce dircome previsto, finirai per eseguire la mv a bsovrascrittura b. Impara a stare attento, impara a dare un'occhiata al comando prima di premere Invio.
egmont,

1
@ Joe Ho scritto uno script wrapper per rmimpedire la cancellazione di directory di primo livello, come /, /etc, /usr, /home, /var, ecc, senza una sostituzione di password. A volte abbiamo bisogno di protezione da noi stessi :)
WinEunuuchs2Unix il

Risposte:


14

Usa gedit ~/.bashrce inserisci queste righe in fondo:

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

Apri un nuovo terminale e ora quando digiti cdsenza parametri rimani semplicemente nella stessa directory.


TL; DR

Se vuoi essere davvero elaborato, puoi inserire una schermata di aiuto quando non vengono passati parametri:

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

Il codice espanso per raggiungere questo obiettivo è:

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
Ma poi hai fatto funzionare il tuo ambiente come nessun altro ambiente. Perché non chiamare la funzione ncd(per "Nuovo cd") e lasciare il vero cdda solo?
Waltinator,

@waltinator Posso migliorare la risposta con un avvertimento su come cd (vuoto) funziona diversamente per le persone oltre all'utente domestico ~/.bashrc. Potresti dare un esempio o due a cosa fare attenzione? ad esempio uno sviluppatore utilizza cd (vuoto) nel proprio script di installazione. (Ipotetico ma non riesco a pensare a un caso). Posso inserire i tuoi esempi nella risposta e suggerire che l'OP usi ncdsempre invece di cd.
WinEunuuchs2Unix,

Adoro personalizzare le cose. È di questo che parla Linux. Ma ho una rigida regola personale per non cambiare mai la funzione (nessun gioco di parole previsto) di qualsiasi comando comune. Questo apre problemi quando lavori su un altro sistema o quando qualcun altro lavora o ti consiglia sul tuo. Concordo con @waltinator e con quell'altro "bravo" Joe
Joe,

6

Se è il completamento della scheda a causare questo, un'opzione è quella di effettuare immediatamente il ciclo di completamento delle voci. Questo può essere fatto usando l'menu-comple opzione readline anziché quella predefinita complete:

bind 'tab: menu-completion'

Quindi, nella mia directory home, ad esempio:

$ cd <tab> # becomes
$ cd .Trash

Certo, anche allora dovresti leggere quello che stai eseguendo.


4

Ecco come ho inserito l'attuale dir e l'utente nel mio titolo di Windows: puoi adattarlo alle tue necessità, ma cd -, equivalente a, cd $OLDPWDè una soluzione migliore.

Dal mio ~/.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

Il problema qui non è cd, e non è stato risolto dalla tecnologia.

Il problema sei tu, ed è risolto dalla pazienza!

Se ti ritrovi spesso a digitare e inviare comandi che non volevi, esercitati a rallentare . Fai un respiro, leggi cosa stai scrivendo e ricontrolla prima di premere invio. Pensaci bene. Non abbiate fretta.

Scoprirai che questo approccio non solo risolve il problema a portata di mano, ma altri problemi molto peggiori che incontrerai se continui lungo il tuo percorso attuale.


2
inoltre, dopo alcuni mesi / anni di utilizzo, ti dimenticherai di aver modificato il comportamento e di avere problemi a lavorare in altri ambienti.
pLumo,

@RoVo Anche quello, buon punto!
Razze di leggerezza in orbita

@RoVo Questo può succedere in pochi giorni. Immediatamente, se esegui il dual boot, passa a una VM ...
Joe,

@Joe Ultimamente sono passato da OSX di giorno a Windows di sera e il cambio di layout della tastiera è davvero confuso!
Razze di leggerezza in orbita

@LightnessRacesinOrbit Sono sicuro! Ho due tastiere per notebook di dimensioni diverse con quasi lo stesso layout e questo è abbastanza male. Questo è anche il motivo per cui non ho mai provato una tastiera Dvorak. Non sono sicuro di come questo si collega alla domanda.
Joe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.