Comment empêcher la commande «cd» d'aller dans le répertoire personnel?


10

Le truc, c'est que parfois je tape cdpar erreur et cela m'amène au répertoire personnel.

par exemple, je suis dans un répertoire qui a un répertoire caché et un répertoire visible, j'appuie rapidement sur cd+ tabet cela m'amène au répertoire personnel


30
Si vous vous trouvez cdquelque part par accident, utilisez cd -pour revenir à votre emplacement précédent - bash conserve la $OLDPWDvariable à cet effet. Voir gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman

4
Si vous ne voulez vraiment cdrien faire, vous pouvez écrire une fonction nommée cdqui ne fait rien quand aucun argument n'est donné, sinon appelezbuiltin cd "$@"
glenn jackman

2
Vraiment mauvaise idée: HOME =.
Joshua

26
Ma meilleure recommandation sincère est de ralentir et d'apprendre à vérifier la commande avant de l'exécuter. En d'autres termes: habituez-vous à cdfaire quoi que ce soit. Si vous gardez l'habitude d'exécuter des commandes que vous n'avez pas revérifiées, vous aurez plus de problèmes plus tard. Par exemple, vous voulez déplacer deux fichiers dans un troisième répertoire: mv a b dir/et l'achèvement de TAB ne produit pas dircomme prévu, vous finirez par exécuter mv a bce qui écrase b. Apprenez à faire attention, apprenez à jeter un œil à la commande avant d'appuyer sur Entrée.
egmont du

1
J'ai écrit un @ Joe script encapsulant rmpour empêcher la suppression des répertoires de haut niveau tels que /, /etc, /usr, /home, /var, etc. sans override mot de passe. Parfois, nous avons besoin d'une protection contre nous-mêmes :)
WinEunuuchs2Unix

Réponses:


14

Utilisez gedit ~/.bashrcet insérez ces lignes en bas:

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

Ouvrez un nouveau terminal et maintenant, lorsque vous tapez cdsans paramètres, vous restez simplement dans le même répertoire.


TL; DR

Si vous voulez être vraiment élaboré, vous pouvez mettre un écran d'aide quand aucun paramètre n'est passé:

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

Le code développé pour accomplir ceci est:

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
Mais alors, vous avez fait fonctionner votre environnement comme aucun autre environnement. Pourquoi ne pas appeler la fonction ncd(pour "New cd") et laisser le réel cdtranquille?
waltinator

@waltinator Je peux améliorer la réponse avec un avertissement sur la façon dont cd (vide) fonctionne différemment pour les personnes autres que l'utilisateur domestique de ~/.bashrc. Pourriez-vous donner un ou deux exemples à surveiller? Par exemple, un développeur utilise cd (vide) dans son script d'installation. (Hypothétique mais je ne peux pas penser à un cas). Je peux regrouper vos exemples dans la réponse et suggérer que le PO utilise ncdtout le temps au lieu de cd.
WinEunuuchs2Unix

J'adore personnaliser les choses. C'est à cela que sert Linux. Mais j'ai une règle personnelle stricte de ne jamais changer la fonction (sans jeu de mots) des commandes courantes. Cela ouvre des problèmes lorsque vous travaillez sur un autre système ou lorsque quelqu'un d'autre travaille ou vous conseille sur le vôtre. Je suis d'accord avec @waltinator et cet autre "bon" Joe
Joe

6

Si c'est la complétion de l'onglet qui est à l'origine de cela, une option consiste à effectuer immédiatement le cycle de fin des entrées. Cela peut être fait en utilisant l'menu-comple option de readline au lieu de la valeur par défaut complete:

bind 'tab: menu-completion'

Ensuite, dans mon répertoire personnel, par exemple:

$ cd <tab> # becomes
$ cd .Trash

Bien sûr, même alors, vous devrez lire ce que vous exécutez.


4

Voici comment je mets le répertoire et l'utilisateur actuels dans mon titre Windows - Vous pouvez l'adapter à vos besoins, mais cd -, équivalent à, cd $OLDPWDc'est une meilleure solution.

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

Le problème ici n'est pas cd, et il n'est pas résolu par la technologie.

Le problème c'est vous, et c'est réglé par la patience!

Si vous vous retrouvez fréquemment à taper et à soumettre des commandes dont vous ne vouliez pas, entraînez-vous à ralentir . Respirez, lisez ce que vous tapez et revérifiez avant d'appuyer sur Entrée. Réfléchissez bien. Ne vous précipitez pas.

Vous constaterez que cette approche résout non seulement le problème actuel , mais d'autres problèmes bien pires que vous allez rencontrer si vous continuez sur votre chemin actuel.


2
De plus, après quelques mois / années d'utilisation, vous oublierez que vous avez modifié le comportement et que vous aurez des problèmes pour travailler dans d'autres environnements.
pLumo

@RoVo Cela aussi, bon point!
Courses de légèreté en orbite

@RoVo Cela peut arriver en quelques jours. Tout de suite, si vous double boot, passez à une VM ...
Joe

@Joe Dernièrement, j'ai basculé entre OSX pendant la journée et Windows le soir et le changement de disposition du clavier est vraiment déroutant!
Courses de légèreté en orbite

@LightnessRacesinOrbit Je suis sûr! J'ai deux claviers portables de tailles différentes avec presque la même disposition et c'est déjà assez. C'est aussi pourquoi je n'ai jamais essayé de clavier Dvorak. Je ne sais tout simplement pas comment cela se rapporte à la question.
Joe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.