문제

특정 실행 파일이 있는 디렉터리로 변경하고 싶은 경우가 많습니다.그래서 나는 다음과 같은 것을 원합니다

cd `which python` 

Python 명령이 설치된 디렉토리로 변경합니다.그러나 cd는 파일이 아닌 디렉터리를 사용하므로 이는 분명히 불법입니다.분명히 파일 이름을 제거하기 위해 할 수 있는 regexp-foo가 있지만 그렇게 하면 쉬운 한 줄짜리라는 요점이 무산됩니다.

도움이 되었습니까?

해결책

여기:

cd $(dirname `which python`)

편집하다:

더 쉽게 (실제로 테스트 됨) :

function cdfoo() { cd $(dirname `which $@`); }

그런 다음 "CDFOO Python".

다른 팁

모든 외부 프로그램 ( 'Dirname'과 훨씬 더 나쁘게, 쓸모 없지만 인기있는 '')를 피하기 위해 약간 다시 작성했을 것입니다.

cdfoo() {
  tgtbin=$(type -P "$1")
  [[ $? != 0 ]] && {
    echo "Error: '$1' not found in PATH" >&2
    return 1
  }
  cd "${tgtbin%/*}"
}

또한 위에서 드문 키워드 '함수'를 수정하고 (매우 간단한) 오류 처리를 추가합니다.

보다 무질서한 솔루션의 시작일 수 있습니다.

비교하려고:

zsh:~% cd =vi(:h)
zsh:/usr/bin%

= CMD는 CMD 로의 경로로 확장되고 (: h)는 머리를 잡는 글로그 수정 자입니다.

ZSH는 쓰기 전용이지만 강력합니다.

그런 일은 트릭을 수행해야합니다.

cd `dirname $(which python)`

내가 할당한 기능 중 하나는 pushd / popd입니다.이는 디렉터리 스택을 유지하므로 디렉터리를 변경하기 전에 현재 작업 디렉터리로 돌아가려는 경우 현재 위치에 대한 기록을 유지하려고 할 필요가 없습니다.

예를 들어:

pushd $(dirname `which $@`)
...
popd

다음과 같은 것을 사용할 수 있습니다.

cd `which <file> | xargs dirname`

CDFOO ()의 동작이 존재하지 않는/비 종자 인수에 대한 DirName의 동작을 따르는 간단한 오류 처리를 추가했습니다.

function cdfoo() { cd $(dirname $(which $1 || ( echo . && echo "Error: '$1' not found" >&2 ) ));}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top