Старое сообщение является непрочитанным сообщением, которое не является новым. Сообщение является новым, если это - первый раз, когда почтовый читатель заметил его в Вашем почтовом ящике. Таким образом, если Вы запускаете свое почтовое средство чтения и существует пять новых сообщений, и Вы выходите, не читая ни одного из них, в следующий раз, когда Вы запускаете средство чтения должно быть пять старых сообщений.
В 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
, "слова" в контексте основанного на слове двигаются/транспонируют/удаляют, виджеты являются последовательностями alnums плюс символы в $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
}
builtin
перед cd
– Ulrich Dangel
17.05.2013, 20:22
cd
опции не работают с zsh
. Более простой хорошо работает с zsh
, НО cd
больше не эквивалентно как cd ~
:/
– Sébastien
22.05.2013, 16:24
[ -z "$1" ]
было достаточно. Я принял, что ответ Stephane дает ему больше видимости, поскольку это, кажется, лучшее решение для zsh
.
– Sébastien
23.05.2013, 11:18
Вы могли использовать 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
, затем странные вещи произойдут.
zsh
.
– Stéphane Chazelas
18.05.2013, 12:42
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
}
zsh
и стили слова. Спасибо также заzsh
команда. Это делает задание отлично. – Sébastien 22.05.2013, 16:33