Wie verhindere ich, dass der Befehl 'cd' in das Ausgangsverzeichnis wechselt?

10

Die Sache ist, dass ich manchmal versehentlich cdtippe und mich zum Ausgangsverzeichnis bringe.

zB bin ich in einem Verzeichnis, das ein verstecktes Verzeichnis und ein sichtbares Verzeichnis hat, drücke schnell cd+ tabund das bringt mich zum Ausgangsverzeichnis

vinicius de novaes
quelle
30
Wenn Sie versehentlich cdirgendwo sind cd -, kehren Sie mit zu Ihrem vorherigen Standort zurück - bash behält die $OLDPWDVariable für diesen Zweck bei. Siehe gnu.org/software/bash/manual/bash.html#index-cd
Glenn Jackman
4
Wenn Sie wirklich cdnichts tun möchten , können Sie eine Funktion mit dem Namen schreiben cd, die nichts tut, wenn keine Argumente angegeben werden. Andernfalls rufen Siebuiltin cd "$@"
Glenn Jackman
2
Wirklich schlechte Idee: HOME =.
Joshua
26
Meine aufrichtige beste Empfehlung ist, langsamer zu werden und zu lernen, den Befehl zu überprüfen, bevor Sie ihn ausführen. Mit anderen Worten: cdGewöhnen Sie sich daran, alles zu tun, was es tut. Wenn Sie die Gewohnheit behalten, Befehle auszuführen, die Sie nicht doppelt überprüft haben, werden Sie später in viel größere Probleme geraten. Wenn Sie beispielsweise zwei Dateien in ein drittes Verzeichnis verschieben möchten: mv a b dir/Wenn die TAB-Vervollständigung nicht dirwie erwartet ausgeführt wird, wird am Ende ausgeführt, mv a bwelche Überschreibungen ausgeführt werden b. Lernen Sie, vorsichtig zu sein und den Befehl zu lesen, bevor Sie die Eingabetaste drücken.
Egmont
1
@ Joe Ich schrieb ein Wrapper - Skript für das rmLöschen von Top - Level - Verzeichnissen zu verhindern , wie /, /etc, /usr, /home, /var, usw. ohne Passwort außer Kraft setzen. Manchmal brauchen wir Schutz vor uns selbst :)
WinEunuuchs2Unix

Antworten:

14

Verwenden Sie gedit ~/.bashrcdiese Zeilen und fügen Sie sie unten ein:

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

Öffnen Sie ein neues Terminal und wenn Sie jetzt cdohne Parameter eingeben, bleiben Sie einfach im selben Verzeichnis.


TL; DR

Wenn Sie wirklich ausführlich sein möchten, können Sie einen Hilfebildschirm aufrufen, wenn keine Parameter übergeben werden:

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

Der erweiterte Code, um dies zu erreichen, lautet:

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
quelle
6
Aber dann haben Sie Ihre Umgebung wie keine andere Umgebung funktionieren lassen. Warum nicht die Funktion ncd(für "Neue CD") aufrufen und real in cdRuhe lassen?
Walzer
@waltinator Ich kann die Antwort mit einer Warnung verbessern, wie cd (leer) für andere Personen als den Heimanwender von anders funktioniert ~/.bashrc. Können Sie ein oder zwei Beispiele nennen, auf die Sie achten sollten? Beispiel: Ein Entwickler verwendet cd (leer) in seinem Installationsskript. (Hypothetisch, aber ich kann mir keinen Fall vorstellen). Ich kann Ihre Beispiele in die Antwort einfließen lassen und vorschlagen, dass das OP die ncdganze Zeit verwendet cd.
WinEunuuchs2Unix
Ich liebe es, Dinge anzupassen. Darum geht es bei Linux. Aber ich habe eine strenge persönliche Regel, niemals die Funktion (kein Wortspiel beabsichtigt) allgemeiner Befehle zu ändern. Dies führt zu Problemen, wenn Sie an einem anderen System arbeiten oder wenn jemand anderes an Ihrem System arbeitet oder Sie zu Ihrem berät. Ich stimme @waltinator und diesem anderen "guten" Joe zu
Joe
6

Wenn dies durch die Tab-Vervollständigung verursacht wird, besteht eine Option darin, den Vervollständigungszyklus sofort durch die Einträge zu führen. Dies kann mit dermenu-comple Option readline anstelle der Standardeinstellung erfolgen complete:

bind 'tab: menu-completion'

Dann in meinem Home-Verzeichnis zum Beispiel:

$ cd <tab> # becomes
$ cd .Trash

Selbst dann müssten Sie natürlich lesen, was Sie ausführen.

muru
quelle
4

So füge ich das aktuelle Verzeichnis und den aktuellen Benutzer in meinen Windows-Titel ein: Sie können es an Ihre Bedürfnisse anpassen, aber das cd -entspricht cd $OLDPWDeiner besseren Lösung.

Von meinem ~/.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
}
Walzer
quelle
4

Das Problem ist hier nicht cdund es wird nicht durch Technologie behoben.

Das Problem bist du und es wird durch Geduld behoben!

Wenn Sie häufig Befehle eingeben und senden, die Sie nicht wollten, üben Sie, langsamer zu werden . Atmen Sie ein, lesen Sie, was Sie eingeben, und überprüfen Sie es noch einmal, bevor Sie die Eingabetaste drücken. Denk darüber nach. Beeil dich nicht.

Sie werden feststellen, dass dieser Ansatz nicht nur das vorliegende Problem löst, sondern auch andere weitaus schlimmere Probleme , auf die Sie stoßen werden, wenn Sie Ihren aktuellen Weg fortsetzen.

Leichtigkeitsrennen im Orbit
quelle
2
Außerdem werden Sie nach einigen Monaten / Jahren der Nutzung vergessen, dass Sie das Verhalten geändert haben und Probleme haben, in anderen Umgebungen zu arbeiten.
pLumo
@RoVo Auch das, guter Punkt!
Leichtigkeitsrennen im Orbit
@RoVo Das kann in ein paar Tagen passieren. Wenn Sie doppelt booten, wechseln Sie sofort zu einer VM ...
Joe
@ Joe In letzter Zeit habe ich tagsüber zwischen OSX und abends zwischen Windows gewechselt und die Änderung des Tastaturlayouts ist wirklich verwirrend!
Leichtigkeitsrennen im Orbit
@ LightnessRacesinOrbit Ich bin sicher! Ich habe zwei unterschiedlich große Notebook-Tastaturen mit fast demselben Layout und das ist schon schlimm genug. Deshalb habe ich auch noch nie eine Dvorak-Tastatur ausprobiert. Nur nicht sicher, wie dies mit der Frage zusammenhängt.
Joe