it-swarm-ko.tech

bash 디렉토리 단축키

cd ~foo를 입력하면 bash가 foo의 전체 디렉토리 경로를 입력하는 바로 가기로 foo 디렉토리로 이동합니다. cp ~foo/bar.txt ~/bar.txt에서 /foo/ 디렉토리에서 홈 디렉토리로 파일을 복사 할 수 있기를 원합니다. 따라서 기본적으로 ~/,하지만 어디에 디렉토리를 지정해야합니다. [Jfgi를해야한다고 확신하지만 무엇을 해야할지 모르겠습니다.]

29
Seamus

내가 사용했던 방법은 바로 가기를 원하는 디렉토리에 대한 심볼릭 링크가 포함 된 디렉토리를 만들고 해당 디렉토리를 CDPATH에 추가하는 것입니다. CDPATH는 디렉토리를 전환 할 때 cd가 검색 할 위치를 제어하므로, 해당 symlinks 디렉토리가 CDPATH에 있으면 cd를 symlinked 디렉토리 중 하나로 즉시 옮길 수 있습니다.

mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b   # Switches to /usr/bin

물론 현재 디렉토리에 "b"라는 디렉토리가 있으면 작동하지 않습니다. CDPATH보다 우선합니다.


나는 보통 "먼저 쉘을 전환해야한다"라는 답변을 싫어하지만,이 exact 기능은 ZSH 에 존재합니다. 당신은 그것을 대신 사용하려고합니다. 그것은 명명 된 디렉토리 라고합니다. 변수 foo를 내보내고 ~foo를 참조하면 $foo 값으로 해석됩니다. 이는 cd 이외의 명령에서 작동하기 때문에 특히 편리합니다.

echo hi > /tmp/test
export t=/tmp
cat ~t/test   # Outputs "hi"
39
Michael Mrozek

cd에 대한 래퍼 함수를 ​​작성하고 "cd"라고 부를 수 있습니다 (궁극적으로 함수는 builtin cd-builtin 키워드 사용). 함수가보기 전에 Bash가 명령 행에서 확장되지 않고 디렉토리 이름의 초기 문자 ( ":")로 표시되지 않는 접두어 문자를 사용할 수 있습니다. 보다 견고하게 만들고 싶지만 간단한 개요는 다음과 같습니다.

# format: [semicolon] shortcut colon destination [semicolon] ...
export CDDATA='foo:/path/to/foo;bar:/path/to/bar;baz:/path/to/baz'

cd () {
    local dest=$1
    if [[ $dest == :* ]]
    then
        [[ $CDDATA =~ (^|;)${dest:1}:([^;]*)(;|$) ]]
        dest=${BASH_REMATCH[2]}
    fi
    if [[ -z $dest ]]
    then
        cd
    else
        builtin cd "$dest"
    fi
}

cd :bar    # pwd is now /path/to/bar

bash와 함께 :

~foo는 사용자 foo의 홈 디렉토리 용으로 예약되어 있습니다. 그 편의를 위해 사용자를 만드는 것은 권장하지 않습니다.

CDPATH 환경 변수를 설정하여 디렉토리 변경 인 경우 인생을 더 쉽게 (또는 더 어렵게) 만들 수 있습니다 (bash(1)에서 찾아보십시오).

그 외에도, 생각할 수있는 유일한 방법은 축약하려는 디렉토리에 대한 환경 변수를 설정하는 것입니다.

$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR
7
user601

Bash 변수는 북마크 시스템을 만드는 데 사용될 수 있습니다. 변수는 모든 명령에서 작동하며 bash는 변수 이름을 탭으로 완성합니다. 최신 버전의 bash에서 /가 변수 이름에 추가되면 변수에 포함 된 경로도 탭 완성 될 수 있습니다.

mydir=/home/chris/dir
ls $my         # Tab completion works on variable name.
ls $mydir/     # Tab completion is equivalent to that with ls /home/chris/dir/
               # (doesn't work in older versions of bash).

지속성을 위해 변수 선언은 .bashrc에서 제공하는 파일에 보관할 수 있습니다. 이 파일은 bash 스크립트이므로 aur="${HOME}/AUR"와 같은 다른 변수를 참조하거나 특정 호스트 if [[ $HOSTNAME == foo ]]; then bar=baz; fi에서만 실행되는 선언을 포함 할 수 있습니다. 이는 여러 파일에서 구성 파일을 재사용 할 때 유용합니다 호스트와 사용자.

다음 bash 기능 (.bashrc에 추가되거나 그로부터 제공됨)을 통해 책갈피 파일에 책갈피를 추가하고 제거 할 수 있습니다. 상당히 새롭고 버그가 없음을 보증하지 않습니다.

bookmark_file=~/.bookmarks
source "$bookmark_file"

bm() {
usage='Usage:
bm add <name> <path>           Create a bookmark for path.
bm add <name>                  Create a bookmark for the current directory.
bm update                      Source the bookmark file.
bm remove <name>               Remove a bookmark'              

case $1 in
    add)
        local path
        if [[ $# -eq 2 ]]; then
            path=.
        Elif [[ $# -eq 3 ]]; then
            if [[ -e $3 ]]; then
                path="$3"
            else
                echo "bm: ${3}: No such file or directory."
                return 1
            fi               
        else
            echo "$usage"
            return 1
        fi

        if declare | grep "^${2}=" > /dev/null; then
            echo "bm: The name $2 is in use."
            return 1
        fi
        path=$(readlink -f "$path")
        echo ${2}=\""$path"\" >> "$bookmark_file"
        eval ${2}=\""$path"\"
        return 0
        ;;
    update)
        if [[ $# -eq 1 ]]; then
            source "$bookmark_file"
            return 0
        fi
        ;;
    remove)
        if [[ $# -eq 2 ]]; then
            unset $2
            local contents=$(grep -v "^${2}=" "$bookmark_file")
            echo "$contents" > "${bookmark_file}.tmp"
            rm -f "$bookmark_file"
            mv "${bookmark_file}.tmp" "$bookmark_file"
            return 0
        fi
        ;;
esac

echo "$usage"
return 1
}
2
varactyl

방법은 ~c를 원하는 경로로 대체하는 cd의 별명을 작성하는 것입니다. 아니면 그냥 zsh를 사용하십시오;)

0
krissi

디렉토리를 변경하려면 wcd를 사용할 수 있습니다. Wherever Change Directory

그것으로 wcd plugin_root.

0
alex

나는 즉시 별칭을 생성하는 아래 기능을 가지고 있습니다.

s () {
    if [[ "x$1" != "x" ]]
    then
        alias $1="cd $PWD;pwd"
        echo "alias $1=\"cd $PWD;pwd\""
    else
        echo "Usage: s[s] <directory bookmark name>"
        return 1
    fi
}

디렉토리를 북마크하고 싶을 때는 s dirName 만 입력하면됩니다. alias dirName="cd /my/current/directory/;pwd"와 같은 별칭이 생성됩니다. dirName를 입력하여이 디렉토리로 돌아올 수 있습니다. bash_aliases에도 저장하는 버전이 있습니다. 이것은 모든 쉘에서 작동합니다.

0
balki