Немного о zshrc

я тут (потому что мудак) подумал, что rm даже с флагом -I слишком опасная команда. Немного подумав, получился такой быдлокод:
rm () {
  # error check
  [ $# -eq 0 ] && { echo "Files are not set!"; return 1 }
  echo "$@" | grep -qe '-h\|--help' && { echo "Usage: rm FILE..."; return 0 }
  echo "$@" | grep -q "-" && echo "Warning: this function doesn't support any flags"
  # set trash path
  TRASHDIR="$HOME/.local/share/Trash"
  TRASHFILE="${TRASHDIR}/files"
  TRASHINFO="${TRASHDIR}/info"
  for DIRECTORY in "${TRASHDIR}" "${TRASHFILE}" "${TRASHINFO}"; do
    if [ -e "${DIRECTORY}" ]; then
      [ -d "${DIRECTORY}" ] || { echo "'${DIRECTORY}' is a file"; return 1 }
    else
      mkdir -p -m755 "${DIRECTORY}"
    fi
  done
  # confirm
  CONFIRM=""
  echo -n "You realy want to remove '$@'? [y/n] "; read -k1 CONFIRM; echo
  [[ ! $CONFIRM =~ [yY] ]] && return 1
  # move
  for FILE in "$@"; do
    DESTFILE="$(basename -- "${FILE}")"
    SUFFIX='';
    ITER=0;
    while [ -e "${TRASHFILE}/${DESTFILE}${SUFFIX}" ]; do
      SUFFIX="_${ITER}";
      ITER=$(expr ${ITER} + 1)
    done
    echo "Remove '${FILE}'"
    if [ "$(dirname -- "$(realpath -- "${FILE}")")" == "${TRASHFILE}" ]; then
      /usr/bin/rm -rf -- "${FILE}"
      /usr/bin/rm -rf -- "${TRASHINFO}/${DESTFILE}.trashinfo"
    else
      mv -- "${FILE}" "${TRASHFILE}/${DESTFILE}${SUFFIX}" || return 1
      echo "[Trash Info]\nPath=$(realpath -- "${FILE}")\nDeletionDate=$(date +%Y-%m-%dT%H:%M:%S)" > "${TRASHINFO}/${DESTFILE}${SUFFIX}.trashinfo" || return 1
    fi
  done
}
Ну в кратце - она (функция) переносит файлы в директорию корзины (по крайней мере, у меня в кедах так), создает info файл для легкого восстановления файла (опять же для кед, к сожалению, я плохо представляю как там в других ДЕ, но говорят также). Автокомплит работает. Старые файлы не затирает. Спрашивает подтверждение (но не требует нажатия enter).
Предложения/замечания/фич реквесты приветствуются. Если для других ДЕ механизм перемещения в корзину из файлового менеджера отличается - опишите мне, я дополню
(в баше вроде тоже должна работать)
(сверху еще прикрутить запрет на sudo rm)
PGP 0x31361F01
arcanisrepo
Добавлю свои пять копеек: прыжки в командной строки по словам при помощи Ctrl-Left, Ctrl-Right, а также Home и End с понятным смыслом. Вписать в .zshrc:
bindkey "^[Oc" forward-word        # Ctrl-Right
bindkey "^[Od" backward-word       # Ctrl-Left
bindkey '^[[7~' beginning-of-line  # Home
bindkey '^[[8~' end-of-line        # End
Теоретически коды клавиш могут быть и другими. Чтобы посмотреть их именно на своей клавиатуре рекомендуют сделать cat > /dev/null и тыкать интересующие комбинации.
Я так понимаю, если переходить на zsh, пакет bash все равно нужно в системе оставить?
GitHub, ArchWiki, AUR
Kycok
Я так понимаю, если переходить на zsh, пакет bash все равно нужно в системе оставить?
теоретически - можно обойтись без него. На практике это практически невозможно. Так что проще оставить
PGP 0x31361F01
arcanisrepo
arcanis
Ну в кратце - она (функция) переносит файлы в директорию корзины (по крайней мере, у меня в кедах так)
У себя для кед я сделал элементарно
trash () {
        kioclient move $@ trash:/
}
Другими DE не пользуюсь =)
И да, решил команду по-другому назвать, чтобы не перезаписывать rm.
Спасибо, arcanis! Раньше с zsh вообще не сталкивался (окромя установочного носителя), а сегодня благодаря вике и твоему посту настроил на своей машинке.
Будет ли он для меня удобнее, чем баш? Время покажет

Путь
# path
export PATH="$PATH:$HOME/bin"
Не могу понять, что это такое, и зачем вообще оно надо
GitHub, ArchWiki, AUR
Kycok
Не могу понять, что это такое, и зачем вообще оно надо
для хранения каких то локальных скриптов, симлинков на исполняемые файлы приложений, которые устанавливаются через свой инсталлятор в хомяк (платные или с хитрой лицензией), например. Где размещать саму директорию bin - вопрос удобства и привычки, хотя я не так давно переместил в ~/.local/bin, чтобы в хомяке не мозолила глаза
PGP 0x31361F01
arcanisrepo
arcanis, спасай! Для примера приведу алиас:
alias rm='rm -r'
Он прописан в .zshrc, который одинаков для root и user. При этом:
  • От юзера алиас нормально читается
  • От рута алиас нормально читается
  • От юзера с использованием sudo алиас НЕ читается (в данном примере говорит, что бла/бла/бла/ пропущено - это каталог)
Как исправить?
GitHub, ArchWiki, AUR
добавь следующую строчку
alias sudo='sudo '
PGP 0x31361F01
arcanisrepo
Есть у меня одна странность. Если ввести несуществующую команду, то она честно красится красным, т.е. zsh знает, что она несуществующая, но посл нажатия enter сообщение "zsh: command not found" появляется где-то через секунду (!). Проблема не критичная, но некрасиво. bash в такой ситуации ругается мгновенно.
Может, я что-то лишнее установил?
pacman -Qs zsh
local/zsh 5.0.5-1
    A very advanced and programmable command interpreter (shell) for UNIX
local/zsh-completions 0.10.0-2
    Additional completion definitions for Zsh
local/zsh-packer 2-2
    ZSH functions to tab-complete repo package names for packer
local/zsh-syntax-highlighting 0.2.0-1
    Fish shell like syntax highlighting for Zsh.
 
Зарегистрироваться или войдите чтобы оставить сообщение.