Функция для перехода вперед на один каталог, если это возможно?

Веб-сайт -их страницы загрузки заставляет вас мизинцем -обещать, что вы ничего хорошего не затеваете перед загрузкой. Я бы просто загрузил RPM вручную в браузере, а затем держал его под рукой, чтобы scpна других хостах, на которые вы хотите его установить.

1
06.05.2020, 10:00
2 ответа

Как насчет

down-dir() {
  if [[ $OLDPWD == "$PWD"* ]]; then
    cd -
  else
    echo "previous dir is not below the current dir"
  fi
}
1
28.04.2021, 23:16

Вы можете сделать что-то вроде:

up-dir() {
  set -o localoptions -o pushdsilent
  [[ $PWD != / ]] && pushd.. && zle reset-prompt
}

undo-up-dir() {
  set -o localoptions -o pushdsilent

  # pop a directory only if the current working directory matches
  # the "h"ead of the top ([1]) of the directory stack:
  [[ $dirstack[1]:h = $PWD ]] && popd && zle reset-prompt
}

zle -N up-dir
zle -N undo-up-dir
bindkey '^[h' up-dir
bindkey '^[b' undo-up-dir

Обратите внимание на &&s, чтобы убедиться, что мы возвращаем не -нулевой статус выхода (, который должен вызывать звуковой сигнал или другую форму сообщения об ошибке ), когда каталог не изменяется.

Вы также можете расширить это undo-up-dirтак, чтобы, когда он больше не может отменять, он все еще мог проверять, есть ли в текущем каталоге ровно один каталог, и переходить в него:

down-dir() {
  set -o localoptions -o pushdsilent

  # pop a directory only if the current working directory matches
  # the "h"ead of the top ([1]) of the directory stack:
  if [[ $dirstack[1]:h = $PWD ]]; then
    popd
  else
    local -a dirs
    dirs=(./*(N/Y2))
    (($#dirs)) || dirs=(./*(ND/Y2)) # try including hidden ones
    (($#dirs)) || dirs=(./*(N-/Y2)) # try including symlinks to dirs
    (($#dirs)) || dirs=(./*(DN-/Y2)) # symlinks and hidden included
    (($#dirs == 1)) && cd $dirs
  fi && zle reset-prompt
}
1
28.04.2021, 23:16

Теги

Похожие вопросы