파일 인수 cd
와 함께 사용할 수 있으면 매우 편리합니다 .
cd myDirectory/anyname.anyExtension
에 해당
cd myDirectory/
이 동작을 달성하기위한 가장 좋은 별칭 또는 기능은 무엇입니까?
편집 : 죄송합니다 .1 위를 언급하지 않았습니다 : 사용합니다zsh
답변
에서 zsh
자주하는 일 :
cd /path/to/somefile(:h)
(에 h
대한 head
).
경우 somefile
심볼릭 링크는, 당신은 할 수 있습니다 :
cd somefile(:A:h)
심볼릭 링크의 대상이있는 디렉토리로 이동하십시오.
zsh
크리스의 동등한은 ‘지금 bash
– 단지 솔루션은 다음과 같습니다
cd() {
[[ ! -e $argv[-1] ]] || [[ -d $argv[-1] ]] || argv[-1]=${argv[-1]%/*}
builtin cd "$@"
}
에서 zsh
“단어”가 무엇을 Ctrl-W제거 하는지 다시 정의 할 수도 있습니다 .
에서 zsh
, 단어 기반 모션 / 조옮김 / 삭제 위젯의 문맥에서 “단어”는 일련의 숫자와 $WORDCHARS
기본적으로 포함 하는 변수 의 문자를 더한 것 /
입니다.
당신은 제거 할 수 /
에서 $WORDCHARS
그, 그래서 Ctrl-W하나 개의 경로 구성 요소를 삭제합니다 :
WORDCHARS=${WORDCHARS/\/}
또 다른 유용한 확장 기능은 select-word-style
다른 단어 스타일 중에서 대화식으로 선택할 수 있는 위젯입니다.
autoload select-word-style
zle -N select-word-style
bindkey '\ew' select-word-style
그런 다음를 누르면 Alt-W다른 단어 스타일 중에서 선택할 수 있습니다.
$ cd /blah/blih<Alt-W>
Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
?
답변
디렉토리를 입력하고을 사용하는 경우 여전히 원래 기능을 유지하려고한다고 가정합니다 bash
.
cd() {
local file="${!#}"
if (( "$#" )) && ! [[ -d "$file" ]]; then
builtin cd "${@:1:($#-1)}" "${file%/*}"
else
builtin cd "$@"
fi
}
cd 옵션 ( -P
, 등) 을 사용하지 않을 경우 에도 다음과 같이 충분합니다.
cd() {
if [ -d "$1" ] || [ -z "$1" ]; then
builtin cd "$@"
else
builtin cd "${1%/*}"
fi
}
답변
dirname
경로에서 파일 이름을 제거하는 데 사용할 수 있습니다 ( 예 :
mycd() { cd "$(dirname "$1")"; }
참조하십시오 man dirname
.
답변
이것을에 추가 .profile
한 다음로드하면 ( source ~/.profile
또는 로그 아웃 한 후 다시 로그인 mycd [file or directory]
하면) 올바른 디렉토리로 이동합니다.
mycd() { if [ -d "$1" ]; then cd "$1"; else cd "$( dirname "$1" )"; fi ; }
이름을 지정하면 cd
이상한 일이 발생합니다.
답변
cd2() {
arg=() dir= cmd= IFS=" " msg='[-L|[-P [-e]]|-h] [dir|file]'
while [ "$#" -gt 1 ] ; do
case "$1" in
-h) printf "%s: cd2 %s\n" "$0" "$msg"
return 1 ;;
*) arg+=("$1") ;;
esac
shift
done
[ -f "${1:-}" ] && dir="$(dirname ${1:-})" || dir="${1:A}"
[ ! -z "$arg" ] && cmd="cd ${arg[@]} $dir" || cmd="cd $dir"
if ! $cmd 2>/dev/null; then
printf "%s: cd2 %s\n" "$0" "$msg"
return 1
fi
}