'cd'명령이 홈 디렉토리로 이동하지 못하게하려면 어떻게합니까?


10

문제는 때로는 cd실수로 입력 하여 홈 디렉토리로 이동하는 것입니다.

예를 들어 숨겨진 디렉토리와 보이는 디렉토리가있는 디렉토리에 있습니다. 빠르게 cd+를 누르면 tab홈 디렉토리로 이동합니다.


30
cd우연히 어딘가에 있다면 , cd -이전 위치로 돌아 가기 위해을 사용하십시오-bash는 $OLDPWD이 목적을 위해 변수를 유지합니다 . 참조 gnu.org/software/bash/manual/bash.html#index-cd
— 글렌 잭맨

4
당신이 진정으로 원하는 경우 cd아무것도하지 않는, 당신은라는 기능을 쓸 수 있습니다 cd그렇지 않으면 전화, 인수가 주어지지 아무것도하지 않는 것을builtin cd "$@"
— 글렌 잭맨

2
정말 나쁜 생각 : HOME =.
— Joshua

26
진심으로 최선의 권장 사항은 명령을 실행하기 전에 속도를 늦추고 확인하는 법을 배우는 것입니다. 다시 말해 cd, 무엇을하든 익숙해 지 십시오. 두 번 확인하지 않은 명령을 실행하는 습관을 유지하면 나중에 더 큰 문제가 발생합니다. 예를 들어 두 파일을 세 번째 디렉토리로 옮기고 싶을 때 예상대로 mv a b dir/TAB 완료가 생성되지 않아 덮어 쓰기를 dir실행 mv a b하게 b됩니다. 주의를 배우고 Enter 키를 누르기 전에 명령을 살펴보십시오.
— egmont

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( "New cd")를 호출하고 실제로 cd내버려 두는가?
— waltinator

@waltinator cd 의 홈 사용자 이외의 사람들에게 (공백)이 다르게 작동 하는 방법에 대한 경고로 답변을 향상시킬 수 있습니다 ~/.bashrc. 주의해야 할 사항을 한두 가지 예를 들어 주시겠습니까? 예를 들어, 개발자는 cd 설치 스크립트에서 (공백)을 사용 합니다. (가설 적이지만 사건을 생각할 수는 없습니다). 귀하의 예를 답변으로 정리하고 ncd대신 항상 OP 사용을 제안 할 수 있습니다 cd.
— WinEunuuchs2Unix

나는 물건을 사용자 정의하는 것을 좋아합니다. 그것은 리눅스에 관한 것입니다. 그러나 나는 일반적인 명령의 기능을 바꾸지 않는 엄격한 개인 규칙을 가지고 있습니다. 다른 시스템에서 작업하거나 다른 사람이 작업하거나 조언 할 때 문제가 발생합니다. 나는 @waltinator와 다른 "좋은"Joe
— Joe

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

@Joe Lately 저는 낮에는 OSX와 저녁에는 Windows를 전환하고 키보드 레이아웃 변경은 정말 혼란 스럽습니다!
— 궤도에서 가벼움 경주

@LightnessRacesinOrbit 확신합니다! 거의 같은 레이아웃의 두 가지 크기의 노트북 키보드가 있으며 그 정도는 나쁩니다. 그렇기 때문에 Dvorak 키보드를 사용해 본 적이 없습니다. 이것이 어떻게 질문과 관련이 있는지 확실하지 않습니다.
— 조
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.