¿Cómo evito que el comando 'cd' vaya al directorio de inicio?


10

El caso es que a veces escribo cdpor error y eso me lleva al directorio de inicio.

por ejemplo, estoy en un directorio que tiene un directorio oculto y un directorio visible, presiono rápidamente cd+ taby eso me lleva al directorio de inicio


30
Si se cdencuentra en algún lugar por accidente, úselo cd -para regresar a su ubicación anterior: bash mantiene la $OLDPWDvariable para este propósito. Consulte gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman el

44
Si realmente no quiere cdhacer nada, puede escribir una función llamada cdque no hace nada cuando no se dan argumentos, de lo contrario llame abuiltin cd "$@"
glenn jackman

2
Muy mala idea: INICIO =.
Joshua

26
Mi mejor recomendación sincera es reducir la velocidad y aprender a verificar el comando antes de ejecutarlo. En otras palabras: acostumbrarse a cdhacer lo que sea que haga. Si mantiene el hábito de ejecutar comandos que no ha verificado dos veces, más adelante tendrá problemas mucho mayores. Por ejemplo, desea mover dos archivos a un tercer directorio: mv a b dir/y la finalización de TAB no se produce dircomo espera, terminará ejecutando lo mv a bque se sobrescribe b. Aprenda a tener cuidado, aprenda a mirar el comando antes de presionar Enter.
egmont

1
@ Joe Escribí un guión envoltorio para rmpara evitar el borrado de directorios de nivel superior, tales como /, /etc, /usr, /home, /var, etc, sin una anulación de la contraseña. A veces necesitamos protección de nosotros mismos :)
WinEunuuchs2Unix

Respuestas:


14

Use gedit ~/.bashrce inserte estas líneas en la parte inferior:

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

Abra una nueva terminal y ahora cuando escribe cdsin parámetros simplemente permanece en el mismo directorio.


TL; DR

Si quieres ser muy elaborado, puedes poner una pantalla de ayuda cuando no se pasan parámetros:

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

El código expandido para lograr esto es:

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 "$@"
}

66
Pero luego has hecho que tu entorno funcione como ningún otro entorno. ¿Por qué no llamar a la función ncd(para "Nuevo CD") y dejar real cdsolo?
waltinator

@waltinator Puedo mejorar la respuesta con una advertencia sobre cómo cd (en blanco) funciona de manera diferente para las personas además del usuario doméstico ~/.bashrc. ¿Podría dar un ejemplo o dos de lo que debe tener cuidado? Por ejemplo, un desarrollador utiliza cd (en blanco) en su script de instalación. (Hipotético pero no puedo pensar en un caso). Puedo resumir sus ejemplos en la respuesta y sugerir que el OP use ncdtodo el tiempo en lugar de cd.
WinEunuuchs2Unix

Me encanta personalizar cosas. De eso se trata Linux. Pero tengo una regla personal estricta de nunca cambiar la función (sin juego de palabras) de cualquier comando común. Esto abre problemas cuando trabaja en otro sistema o cuando alguien más trabaja o le aconseja sobre el suyo. Estoy de acuerdo con @waltinator y ese otro "bueno" Joe
Joe

6

Si es la finalización de la pestaña lo que está causando esto, una opción es realizar el ciclo de finalización a través de las entradas de inmediato. Esto se puede hacer usando lamenu-comple opción de readline en lugar de la predeterminada complete:

bind 'tab: menu-completion'

Luego, en mi directorio de inicio, por ejemplo:

$ cd <tab> # becomes
$ cd .Trash

Por supuesto, incluso entonces tendrías que leer lo que estás ejecutando.


4

Así es como pongo el directorio y el usuario actuales en mi título de Windows: puede adaptarlo a su necesidad, pero cd -, equivalente a, cd $OLDPWDes una mejor solución.

De mi ~/.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

El problema aquí no es cd, y no está solucionado por la tecnología.

¡El problema es usted, y se soluciona con paciencia!

Si con frecuencia te encuentras escribiendo y enviando comandos que no querías, practica la ralentización . Tome un respiro, lea lo que está escribiendo y vuelva a verificarlo antes de presionar enter. Piénsalo. No te apresures.

Encontrará que este enfoque no solo resuelve el problema en cuestión, sino también otros problemas mucho peores que encontrará si continúa por su camino actual.


2
Además, después de algunos meses / años de uso, olvidará que cambió el comportamiento y tendrá problemas para trabajar en otros entornos.
pLumo

@RoVo ¡Eso también, buen punto!
Carreras de ligereza en órbita

@RoVo Eso puede suceder en unos pocos días. Inmediatamente, si tiene un arranque dual, cambie a una VM ...
Joe

@Joe Últimamente he estado cambiando entre OSX durante el día y Windows por la noche y el cambio de diseño del teclado es realmente confuso.
Carreras de ligereza en órbita el

@LightnessRacesinOrbit estoy seguro! Tengo dos teclados para portátiles de diferentes tamaños con casi el mismo diseño y eso es bastante malo. Es por eso que nunca he probado un teclado Dvorak. Simplemente no estoy seguro de cómo se relaciona esto con la pregunta.
Joe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.