cd를 입력하는 데 사용된 명령의 출력

cd를 입력하는 데 사용된 명령의 출력

which 명령의 출력을 가져오고 cd를 상위 디렉토리로 가져가고 싶습니다. 예를 들어 다음과 같은 항목이 있다고 가정해 보겠습니다.

which someprogram

출력:

/home/me/somedirectory/someprogram

특정 프로그램이 있는 디렉토리로 CD를 이동하고 싶습니다.

cd /home/me/somedirectory

나는 이 작업을 한 줄로 완료하고 싶습니다. 가장 우아하고, 가장 까다로우며, 가장 짧은 방법은 무엇입니까?

답변1

사용 dirname:

cd "`dirname $(which program)`"

답변2

Bash에서는 type -pover를 추천합니다 which.which외부 명령이므로 때로는 까다로울 수 있습니다.. sedFinal 이후의 모든 항목을 제거 /하거나 특수 목적 유틸리티를 사용할 수 있습니다 dirname.

cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"

명령줄에서 \[?*디렉터리에 특수 문자(공백 또는 )가 포함되어 있지 않은 경우 따옴표를 생략할 수 있습니다. 백틱 중 하나 대신 백틱을 사용할 수도 있습니다 $(…)(중첩 백틱은 어렵고 여기서는 그럴 가치가 없습니다).

cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`

zsh에는 더 간결한 구문이 있습니다.

cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}

(예, 마지막 것은 신비스럽습니다. 값이 와 동일한 변수 ${VAR+TEXT}의 구문을 사용합니다 .)_=program$(whence -p program)

관련 정보