문제
특정 실행 파일이 있는 디렉터리로 변경하고 싶은 경우가 많습니다.그래서 나는 다음과 같은 것을 원합니다
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 ) ));}
제휴하지 않습니다 StackOverflow