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