bash의“북마크”


24

여러 계층의 중첩 디렉토리를 탐색하는 것은 종종 고통스러운 일입니다. Firefox에서는 책갈피가 있기 때문에 쉽습니다. 따라서 파일을 책갈피에 추가하려면 다음을 입력하십시오.

$ go --add classes "repo/www/public/util/classes"

그런 다음이 디렉토리로 이동하려면 다음을 입력하십시오.

$ go classes

이전에는 비슷한 링크를 사용하기 위해 심볼릭 링크를 사용했지만 홈 디렉토리를 어지럽히고 싶지 않습니다. 유용한 다른 기능이 많이 있습니다. 예를 들어, 입력을 시작한 go cl다음 탭을 눌러 자동 완성을 수행하고 싶습니다 . 때때로 저장소의 여러 사본이 체크 아웃되어 있으므로 프로그램이 여러 컨텍스트를 작성하고 컨텍스트 기본 디렉토리를 기준으로 책갈피를 설정하는 것이 유용합니다.

내 스크립트 세트를 함께 연결하기 전에 이미 이와 같은 것이 있습니까?



4
당신이 파이어 폭스에 떠들썩한 파티를 비교 계속하면, 누군가가 :( bash에 대한 awesomebar 것
hhaamu

답변:


12

쉘북 마킹 도구를 너무 오랫동안 찾고 있었는데 찾은 솔루션에 만족하지 않습니다.

그러나 결국에는 훌륭한 범용 도구 인 command-line fuzzy finder를 발견했습니다 .

주로 파일을 "퍼지 찾기"할 수 있지만 (위의 링크로 풍부한 GIF 애니메이션 확인) 임의의 텍스트 데이터를 공급하고이 데이터를 필터링 할 수도 있습니다. 따라서 바로 가기 아이디어는 간단합니다. 경로가있는 파일 (바로 가기)을 유지 관리하고이 파일을 퍼지 필터링하기 만하면됩니다. 모양은 다음과 같습니다. cdg원하는 경우 "cd global"의 명령 을 입력 하고 책갈피 목록을 가져 와서 몇 번의 키 입력으로 필요한 항목을 선택한 다음 Enter 키를 누릅니다. 작업 디렉토리가 선택된 항목으로 변경되었습니다.

cdg

매우 빠르고 편리합니다. 일반적으로 필요한 항목을 3-4 자로 입력하면 나머지는 이미 필터링됩니다. 또한 화살표 키 또는 Ctrl+j/로 목록을 이동할 수 있습니다 Ctrl+k.

이 단축키 / 책갈피 솔루션에 대한 자세한 기사는 다음과 같습니다 . 쉘의 퍼지 단축키 .


19

autojump 와 같은 것을 찾고 있다고 생각합니다 . 주어진 디렉토리에서 소요되는 시간과 관련된 "키 가중치"세트를 개발하려면 약간의 CD를 사용해야합니다. 그런 다음 'classes'디렉토리에서 많은 시간을 보냈다고 가정하면 직접 입력하여 거기로 이동할 수 있습니다

j cl

당신은 "키 가중치"를 볼 수 있습니다

jumpstat

나는 최근에 조금 더 복잡하지만, 흥미와 관련, 도구라고 볼 f: github.com/clvv/f
tcdyl

14

언급했듯이 별칭은 좋은 메커니즘입니다. bash 쉘에는 또한 위치로 바로 이동하는 내장 메커니즘이 있습니다 CDPATH. 처럼 설정 PATH하지만 cd프로그램을 검색 하는 대신 사용됩니다 .

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

맨 페이지에서 :

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

내 자신, 나는 가고 싶은 곳으로의 심볼릭 링크가있는 디렉토리와 이것을 결합했다.

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

이 디렉토리는 매우 정확한 것으로 나타나지 않는다는 단점이 있지만, 그 사용하여 수리 할 수 있습니다 cd -P또는 설정 set -P.


CDPATH는 흥미롭지 만 별도의 go 명령을 사용하여 동작을 항상 예측할 수 있습니다.
Casebash

1
세트 -P의 경우 +1 내 심볼릭 링크 중 일부는 그들이 실제로 어디로 갔는지 기억하지 못하고 그 정보를 보여주는 명령을 기억하지 못했기 때문에 나를 미치게했습니다.
Joe

@Joe, 나는 시스템 심볼릭 링크를 위해 symlink 디렉토리에있는 것을 좋아하지 않기 때문에 alias C='cd -P .'오히려 오히려 추가 할 것이다 set -P.
와일드 카드

@Wildcard-재미있는-이것이 당신에게 차이를 만드는 예를 줄 수 있습니까? 방금 실행 help cd했지만 여전히 -P 옵션의 기능을 이해하지 못합니다.
Joe

@Joemkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
와일드 카드

9

Bash의 기존 기록 및 기록 검색 기능을 결합 할 수 있습니다. 을 눌러 Ctrl-R증분 역방향 검색을 시작한 다음 가장 고유 한 경로 부분을 입력하기 시작합니다.

cd해당 디렉토리와 관련된 가장 최근의 명령으로 돌아갈 때까지 문자를 계속 입력 하거나,를 Ctrl-R다시 눌러 기록에서 지금까지 입력 한 내용과 일치하는 다음 최신 명령으로 되돌아 갈 수 있습니다 .

나는 항상 이것을한다.

사실, 한 걸음 더 나아갑니다. 역사에서 유지해야하지만 쉘 스크립트에 커밋 할 가치가없는 일련의 명령을 발견하기 시작 하면 하나의 긴 명령의 하위 문자열을 역 검색 하고 전체 시퀀스를 실행하고 실행할 수 있도록 명령 &&과 결합기를 연결하기 시작 합니다. 일단.;Enter

예를 들어, 개발 중에 내 프로그램 중 하나를 빌드하고 실행하는 방법은 다음과 같습니다.

$ ( cd .. ; make install ) && ./start_my_program

최상위 소스 디렉토리 아래에있는 설치 디렉토리에서이 작업을 수행합니다. cd하위 셸에서, 빌드 및 설치 부분 을 래핑 하여이 프로세스 중에 어떤 일이 발생하더라도 아무런 변화없이 정상적인 쉘로 돌아갑니다. 성공하면 (&&) 빌드되고 설치된 프로그램을 시작합니다. 나는 Ctrl-R그때 내 역사에서 이것을 한 번만 sta찾을 수 있습니다.

이것을 사용하는 또 다른 예는 동일한 프로그램의 RPM을 구축하는 순서입니다. 지루한 작업의 대부분은 셸 스크립트에 있지만 Bash가 유지하기 때문에 빌드 된 RPM을 빌드하고 배포하는 모든 작업을 수행하기 위해 일반적으로 입력 해야하는 명령이 여전히 있습니다. 나를 위해 역사에서.

모든이를 결합 export HISTSIZE=bignum하고 shopt histappend당신은 단지 코끼리의 명령 메모리를 구축했다.

나는 한 번에 최대 코딩 또 다른 해결책은에 내 대답여기에 또 다른 질문 . cd히스토리 검색 옵션은 모든 목적과 모든 명령에 대해 작동하는 반면, 목적에 맞게 조정해야 할 수도 있으며 명령 만 처리 합니다.


6

나는 alias자주 방문하는 긴 경로를 단축하는 데 사용 합니다. 에 aliases 세트를 넣을 수 bashrc있으므로 bash는 로그인 할 때마다 기억할 수 있습니다. 그리고 bash는 자동 완성에 별칭을 추가합니다.

나는 당신의 경우를 위해 이와 같은 것을 쓸 것입니다 : alias go-classes="cd ~/repo/www/public/util/classes"


6

bashmarks (github에서)를 찾고있을 수 있습니다 .
읽어보기에서 :

Bashmarks는 일반적으로 사용되는 디렉토리를 저장하고 이동할 수있는 쉘 스크립트입니다. 이제 탭 완성을 지원합니다.


4

이것은 완전하지도 않고 어리석지도 않으며 단지 초안 일뿐입니다. 다음 ~/.bashrc을 추가하면 삭제 및 목록 디렉토리 북마크를 추가하는 세 가지 명령이 있습니다 (쉘 별명을 기반으로하므로 자동 완성도 가능합니다).

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

사용법은 매우 간단합니다. bmadd인수를 사용하면 인수 뒤에 이름이 지정된 별명이 추가됩니다. 이 별명은 설정 한 디렉토리로 cd를 만듭니다. 인수 없이는 현재 dirname을 별명 이름으로 사용합니다. 비슷한 방법으로, bmdel존재하는 경우 별명을 삭제하고 bmlist현재 책갈피를 나열합니다.

예 :

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

나는 얼마 전에 같은 요구를 겪었고 절대 / 상대 경로를 북마크하고 쉽게 기억할 수있는 짧은 이름으로 매핑하는 데 도움이되는 몇 가지 스크립트를 작성하기로 결정했습니다.

이 스크립트는 사용하기가 매우 쉬우 며 간단히 이동하려는 디렉토리의 별명으로 제공하는 짧은 이름의 함수를 작성합니다. 간단한 이름을 입력하기 만하면 북마크 된 디렉토리로 이동합니다.

다음은 북 마커 스크립트 소스 에 대한 링크 입니다. 그건 그렇고, 나는 그것을 Bookmarker라고 불렀습니다.

용법

일단 설치되면 사용하기가 쉽지 않습니다.

디렉토리를 표시하려면

$ mark /this/is/a/very/very/looooong/path mydir

표시된 지역으로 이동하려면 :

$ mydir

표시된 내용을 보려면

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

표시된 디렉토리를 삭제하려면 다음을 수행하십시오.

$ umark myDir

추가 예, 설치 지침 등은 매우 자세한 설명서를 참조하십시오 .


3

cdargs 디렉토리 북마크에 가장 적합한 도구입니다.

사용 예 는 YouTube 의 cd 명령 비디오에 대한 책갈피를 참조하십시오 .

사용법 예

cdargsncurses GUI이므로 쉘 내에서 시각적으로 탐색 할 수 있습니다. 일단 설치되면 쉘 스크립트를 소싱하여 주어진 쉘에서 설정합니다.

$ source /etc/profile.d/cdargs.sh

이를 통해 쉘에서 호출 할 수있는 여러 기능을 사용할 수 있습니다.

GUI를 소환하십시오.

$ cv

이 유형의 GUI 결과 :

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

화살표 키를 사용하여 위아래로 이동하여 목록을 탐색 할 수 있습니다. 왼쪽 화살표 ( )는 디렉토리 트리에서 한 수준 위로 올라가고 오른쪽 화살표 ( )는 디렉토리로 드릴 다운합니다.

마킹 디렉토리 :

당신도 사용할 수 있습니다 c당신이 탐색 현재 디렉토리 또는 당신이 사용할 수있는 a현재 커서가 강조하고있는 디렉토리를 추가 할 수 있습니다.

작동 모드 :

cdargs이와 관련하여 모드에 대한 개념이있는 경우 vi / vim과 약간 비슷 합니다 . 브라우징 (B)과 리스팅 (L)의 두 가지가 있습니다. 쉘 하단의 디스플레이를 통해 현재 사용중인 모드를 확인할 수 있습니다.

리스팅 모드 :

L: /home/saml/tst/88038

브라우징 모드 :

B: /home/saml/tst/88038

탭 키 ( TAB)를 눌러 모드를 변경할 수 있습니다 .

이것은 빙산의 일각에 불과합니다 man cdargs. 자세한 내용 은 맨 페이지 ( ) 및 내장 도움말을 참조하십시오.


2

이를위한 가장 좋은 도구는 wcd 입니다. 나는 많은 다른 도구를 테스트했으며, 이것은 당신이 요구하는 방식으로 정확하게 사용되며 이전의 모든 솔루션보다 여러면에서 더 좋습니다.


1

다른 답변은 훌륭하고 구체적입니다. 그것을 보는 또 다른 방법은 생각할 수있는 거의 모든 것을 할 수있는 키보드 매크로 프로세서를 사용하는 것입니다.

AutoKey를 확인하십시오. 워드 프로세서 자동 고침 또는 bash 기록과 같은 문구를 대체 할 수 있으며 사용자가 입력 한 것처럼 거의 모든 작업을 수행하고 문자 입력 장치에 키 입력을 보내는 핫키에서 파이썬 스크립트를 실행할 수도 있습니다.

(이 질문과 관련하여) 유일하게 "약점"은 gnome 또는 kde로 실행하기 위해 GUI가 필요하다는 것입니다. 다른 답변에는이 요구 사항이 없습니다.

https://code.google.com/p/autokey/

1

z 라는 또 다른 대안이 있습니다 .

모든 디렉토리 변경에 대해 학습합니다.

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

그런 다음 나중에 퍼지 일치를 사용하여 해당 디렉토리로 변경할 수 있습니다.

$ z mp
$ pwd
/tmp

1

Apparix 는이를 수행하는 또 다른 도구입니다. 유용한 기능 중 하나는 마크의 서브 디렉토리로 직접 이동하여 해당 서브 디렉토리에서 탭을 완성 할 수 있다는 것입니다.


0

나는 생각에 또 다른 솔루션 autojumpz입니다 fasd.

방문한 디렉토리를 추적하고 가장 자주 사용 z dir-name하는 이름으로 디렉토리로 변경됩니다 dir-name. 자주 사용하는 파일에 대한 기능도 있습니다.

https://github.com/clvv/fasd 에서 복제 할 수 있습니다.

설치 솔직, 복제, 메이크업 설치 한 다음 수정입니다 .bashrc(또는 .zshrc등).


0

.bashrc또는에 별칭을 추가해야합니다 .bash_profile.

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

이제 바로 가기를 원한다고 ~/Desktop/Coding/Projects입력하고을 호출 한다고 가정 해 봅시다 goto_Projs. 텍스트 편집기에서 열린 파일에 다음 줄을 추가해야합니다.

alias goto_Projs='cd ~/Desktop/Coding/Projects'

이제 텍스트 편집기가 저장 /User/<yourusername>/하거나 ~/(물론) 종료하고 쉘 프롬프트가 반환되면 원하는대로하십시오.

source ~/.bash_profile

위에서 설명한대로 별칭을 호출 할 수 있습니다.


0

명령 끝에 주석을 추가 한 다음 ctrl R주석 검색을 취소하기 위해 호출하는 방법을 사용합니다 . 다음과 같은 장점이 있습니다.

  • 자연어로 명령을 검색하다
  • 언제든지 의견을 변경하고 최신 업데이트를 받으십시오. ctrl R
  • 사용 ctrl Rtab비행에 따라서 유사한 명령의 가족에 주석에게 일반적인 바로 가기의 종류를 만드는 명령 자체에 사소한 조작을 할
  • 설정, 설치 또는 예약 유지가 필요 없습니다 :-)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.