В zsh
, я часто делаю:
cd /path/to/somefile(:h)
( h
для head
).
Если somefile
это символическая ссылка, вы также можете сделать:
cd somefile(:A:h)
Чтобы попасть в каталог, где может быть найдена цель символической ссылки.
zsh
Эквивалент Chris' теперь 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
?
zsh
и слову стилей. Спасибо также заzsh
команду. Это делает работу отлично.Я предполагаю, что вы все еще хотите сохранить исходную функциональность, если вы вводите каталог, и вы используете
bash
.Если вы никогда не собираетесь использовать опции cd (
-P
и т. Д.), Этого также будет достаточно:источник
builtin
передcd
вызовамиcd
параметры, не работает сzsh
. С более простым работает хорошоzsh
, НОcd
больше не эквивалентно такcd ~
: /[ -z "$1" ]
было достаточно. Я принял ответ Стефана, чтобы сделать его более заметным, так как это, кажется, лучшее решение дляzsh
.Вы можете использовать,
dirname
чтобы убрать имя файла из пути, напримерСм
man dirname
.источник
Если вы добавите это в свой
.profile
, затем загрузите его (source ~/.profile
или выйдите из системы и войдите снова), тогдаmycd [file or directory]
вы попадете в правильный каталог:Если вы назовете это
cd
, тогда произойдут странные вещи.источник
zsh
.cd
, вроде-P
.источник
$(sudo reboot)
, эта функция может перезагрузить систему. Кроме того, пользователь используетzsh
, а неbash
.cd '$(sudo reboot)'
изменится каталог, а ваша функция попытается оценить имя.