Вещь состоит в том, что иногда я ввожу cd
по ошибке и которые берут меня к корневому каталогу.
например, я нахожусь в каталоге, которые имеют скрытый каталог и видимый каталог, я быстро нажимаю cd
+tab и это берут меня к корневому каталогу
Если это связано с завершением вкладки, один из вариантов - немедленно выполнить цикл завершения по записям. Это можно сделать, используя опцию readline menu-comple
вместо значения по умолчанию complete
:
bind 'tab: menu-completion'
Затем, в моем домашнем каталоге, например:
$ cd <tab> # becomes
$ cd .Trash
< hr> Конечно, даже тогда вам придется читать то, что вы выполняете.
Вот как я помещаю имя текущего пользователя и пользователя в заголовок моего окна. Вы можете адаптировать его к своим потребностям, но cd -
, эквивалентное cd $OLDPWD
, является лучшим решением.
Из моего ~/.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
}
Проблема здесь не в cd
, и она не решена технологией.
Проблема в вас, и она решается с терпением!
Если вы часто сталкиваетесь с вводом и отправкой ненужных вам команд, потренируйтесь в замедлении . Сделайте вдох, прочитайте то, что вы печатаете, и дважды проверьте его, прежде чем нажать Enter. Продумайте это до конца. Не торопитесь.
Вы обнаружите, что этот подход не только решает проблему, но и другие гораздо худшие проблемы , с которыми вы столкнетесь, если продолжите свой текущий путь.
Использовать gedit ~/.bashrc
и вставьте эти строки внизу:
cd() {
[[ $# -eq 0 ]] && return
builtin cd "$@"
}
Откройте новый терминал и теперь когда Вы введете cd
без параметров Вы просто остаетесь в том же каталоге.
Если Вы хотите быть действительно тщательно продуманными, можно вставить экран справки, когда никакие параметры не передаются:
$ 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'
Расширенный код для выполнения этого:
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 "$@"
}