Як я не дозволяю команді 'cd' перейти до домашнього каталогу?


10

Вся справа в тому, що іноді я друкую cdпомилково, і це відводить мене до домашнього каталогу.

наприклад, я в каталозі, у якому є прихований каталог і видимий каталог, я швидко натискаю cd+, tabі це відводить мене до домашнього каталогу


30
Якщо ви cdдесь випадково, використовуйте cd -для повернення до попереднього місця розташування - bash зберігає $OLDPWDзмінну для цієї мети. Дивіться gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman

4
Якщо ви справді не хочете cdнічого робити, ви можете написати функцію, яка називається cd, яка нічого не робить, коли аргументи не наводяться, інакше зателефонуйтеbuiltin cd "$@"
glenn jackman

2
Дійсно погана ідея: HOME =.
Джошуа

26
Моя щира найкраща рекомендація - уповільнити та навчитися перевіряти команду, перш ніж її виконати. Іншими словами: звикніть cdробити все, що робить. Якщо ви збережете звичку виконувати команди, які ви не перевірили двічі, згодом у вас виникнуть набагато більші проблеми. Наприклад, ви хочете перемістити два файли в третій каталог: mv a b dir/і завершення TAB не видається так, dirяк ви очікували, ви в кінцевому підсумку виконаєте, mv a bщо перезаписується b. Навчіться бути обережними, навчіться переглядати команду перед натисканням клавіші Enter.
Егмонт

1
@Joe Я написав сценарій оболонки для rmзапобігання стирання каталогів верхнього рівня , таких як /, /etc, /usr, /home, /varі т.д. без пароля перевизначення. Іноді нам потрібен захист від нас самих :)
WinEunuuchs2Unix

Відповіді:


14

Використовуйте gedit ~/.bashrcта вставляйте ці рядки внизу:

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

Відкрийте новий термінал і тепер, коли ви вводите cdпараметри без параметрів, ви просто залишаєтесь в одному каталозі.


TL; DR

Якщо ви хочете бути дуже досконалими, ви можете помістити екран довідки, коли не буде передано жодних параметрів:

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

6
Але тоді ви змусили ваше середовище працювати, як жодне інше середовище. Чому б не зателефонувати у функцію ncd(для "Нового CD"), а залишити реальну в cdспокої?
waltinator

@waltinator Я можу вдосконалити відповідь за допомогою попередження про те, як cd (порожній) працює по-іншому для людей, крім домашнього користувача ~/.bashrc. Чи можете ви навести приклад чи два, на що слідкувати? наприклад, розробник використовує cd (пустий) у своєму сценарії встановлення. (Гіпотетично, але я не можу придумати випадок). Я можу згорнути ваші приклади у відповідь і запропонувати ОП використовувати ncdвесь час замість цього cd.
WinEunuuchs2Unix

Я люблю налаштовувати речі. Це те, про що йдеться в Linux. Але в мене є чітке особисте правило ніколи не змінювати функції (не каламбур) жодних загальних команд. Це відкриває проблеми, коли ви працюєте в іншій системі або коли хтось інший працює над або консультує вас щодо вашої. Я згоден з @waltinator і тим іншим "добрим" Джо
Джо

6

Якщо це викликає заповнення вкладки, одним із варіантів є негайне завершення циклу завершення за допомогою записів. Це можна зробити за допомогою параметра readlinemenu-comple замість типового complete:

bind 'tab: menu-completion'

Потім у моєму домашньому каталозі, наприклад:

$ cd <tab> # becomes
$ cd .Trash

Звичайно, навіть тоді вам доведеться читати те, що ви виконуєте.


4

Ось як я помістив поточного редактора та користувача в назву Windows - Ви можете адаптувати його до ваших потреб, але 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
}

4

Проблеми тут немає cd, і це не виправлено технологією.

Проблема - це ти, і це фіксується терпінням!

Якщо ви часто зустрічаєтеся з набором та поданням команд, яких ви не хотіли, практикуйте гальмувати . Зробіть подих, прочитайте те, що ви набираєте, і двічі перевірте це, перш ніж натиснути клавішу Enter. Подумайте. Не поспішайте.

Ви побачите, що такий підхід вирішує не тільки проблему, але й інші набагато гірші проблеми, з якими ви зіткнетеся, якщо продовжите свій поточний шлях.


2
також через кілька місяців / років використання ви забудете про те, що ви змінили поведінку і у вас виникнуть проблеми працювати в інших середовищах.
pLumo

@RoVo Це теж хороший момент!
Гонки легкості по орбіті

@RoVo Це може статися за кілька днів. Відразу, якщо ви подвійно завантажуєтесь, перейдіть на VM ...
Джо,

@Joe Останнім часом я перемикаюся між OSX вдень та Windows ввечері, і зміна розкладки клавіатури дуже заплутано!
Гонки легкості по орбіті

@LightnessRacesinOrbit Я впевнений! У мене є дві клавіатури для ноутбуків різного розміру з майже однаковою версією, і це досить погано. Ось чому я ніколи не пробував клавіатуру Dvorak. Просто не впевнений, як це стосується питання.
Джо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.