which 명령의 출력을 가져오고 cd를 상위 디렉토리로 가져가고 싶습니다. 예를 들어 다음과 같은 항목이 있다고 가정해 보겠습니다.
which someprogram
출력:
/home/me/somedirectory/someprogram
특정 프로그램이 있는 디렉토리로 CD를 이동하고 싶습니다.
cd /home/me/somedirectory
나는 이 작업을 한 줄로 완료하고 싶습니다. 가장 우아하고, 가장 까다로우며, 가장 짧은 방법은 무엇입니까?
답변1
사용 dirname
:
cd "`dirname $(which program)`"
답변2
Bash에서는 type -p
over를 추천합니다 which
.which
외부 명령이므로 때로는 까다로울 수 있습니다.. sed
Final 이후의 모든 항목을 제거 /
하거나 특수 목적 유틸리티를 사용할 수 있습니다 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)