다음을 입력할 수 있습니다.
dirname ~/home/blah/file.zip
예를 들어, 이것은 그 자체로는 잘 작동하지만 이 구문을 일부 명령에 대한 인수로 사용하면 항상 "dirname"을 원하는 디렉터리로 읽습니다. 즉:
cd dirname ~/home/blah/file.zip
bash: cd: dirname: No such file or directory
기본적으로 'dirname'은 어떻게 얻나요?문서'를 엔터티로 해석하나요?
답변1
cd "$(dirname ~/home/blah/file.zip)"
$(
명령 대체의 한 형태입니다. 이것배쉬 가이드 위키이 과정에 대한 좋은 정보가 있습니다.
답변2
(다른 답변에 이미 표시된 명령 대체 기능을 반복하지 않겠습니다.)
이런 일이 자주 발생하는 경우 함수를 정의할 수 있습니다. 예를 들어 다음을 다음과 같이 입력하세요 ~/.bashrc
.
d () {
if ! [ -d "$1/." ]; then
set -- "${1%/*}"
fi
cd -- "$1"
}
d /path/to/directory
이 정의를 사용하면 지정된 디렉터리로 변경을 실행하거나 d /path/to/file
지정된 파일(예 /path/to
: .
이 특정 명령의 경우 명령을 편집하여 마지막 단어를 삭제할 수 있습니다. 기본 키 바인딩을 사용하여 줄 끝에서 시작하여 Alt+를 눌러 B이전 단어로 돌아가고 Alt+를 눌러 D오른쪽에 있는 단어를 삭제합니다. 대부분의 터미널에서는 줄 끝에서 시작하여 를 Esc Backspace눌러 바로 왼쪽에 있는 단어를 삭제할 수 있습니다.
path가 디렉토리인 경우 ~/home/blah/subdir/..
와 동일한 디렉토리를 지정하십시오 ~/home/blah
.
zsh에서는 (:h)
경로 끝에 태그를 추가하여 파일 이름을 제거하고 디렉터리 부분만 유지할 수 있습니다. ( h
"head"에 대해 작동하며 t
"tail"은 파일 부분만 유지합니다.) 다른 것을 사용할 수 있습니다.역사적 수정(:…)
경로나 글로브 뒤에 .
cd ~/home/blah/file.zip(:h)
답변3
Chris가 권장하는 양식이 "$(cmd)"
가장 안전하지만 이 양식이 입력하기 더 쉽고 일반적으로 잘 작동합니다.
$ cd `dirname ~/home/blah/file.zip`
차이점은 백틱 형식에 있습니다.혼란스러울 수도 있다명령의 특정 문자에 따라 확장됩니다. 표시된 것과 같은 간단한 명령의 경우 이것이 문제가 되지 않는다는 것을 즉시 알 수 있습니다. 임의의 매개변수를 허용해야 하는 쉘 스크립트의 경우 $()
큰따옴표를 사용하는 것이 더 안전합니다.
답변4
(댓글을 달기에는 너무 커서 @gilles의 답변에 대한 답변입니다.)
Giles가 이미 지적했듯이 필요한 기능을 자동으로 수행하는 함수를 만들 수 있습니다. 그러나 이를 재정의하고 대신 임의의 이름을 사용할 수도 있습니다 cd
.
zsh의 경우:
cd() {
if (( ${#argv} == 1 )) && [[ -f ${1} ]]; then
builtin cd ${1:h}
else
builtin cd "$@"
fi
}
배쉬의 경우:
cd() {
if [ $# == 1 ] && [[ -f ${1} ]]; then
builtin cd "$(dirname ${1})"
else
builtin cd "$@"
fi
}
cd /path/to/file
이렇게 하면 디렉토리를 특정 파일로 자동으로 변경하는 다음 과 같은 작업을 수행할 수 있습니다 . 물론 zsh와 함께 bash 버전을 사용할 수도 있습니다.