Альтернативный псевдоним суффикса Zsh в bash

В пакете apache2-utilsприсутствует утилита под названием rotatelogs, она может быть вам полезна.

Краткий обзор:

rotatelogs [ -l ] [ -L имя ссылки ] [ -p программа ] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n количество файлов] файл журнала время вращения|размер файла(B|K|M|G) [ смещение ]

Пример:

your_program | rotatelogs -n 5 /var/log/logfile 1M

Полное руководство вы можете прочитать по этой ссылке.

1
31.03.2017, 03:14
1 ответ

Как насчет exec zsh?

Но эта функция действительно может быть реализована в bash (начиная с версии 4.0; Пользователи OSX, см. предыдущий абзац ). Вроде. Когда bash встречает команду, которой нет в PATH, он запускает функцию с именем command_not_found_handle. Вы можете написать функцию, которая пытается открыть файл, если это файл в текущем каталоге.

typeset -A extension_aliases
command_not_found_handle () {
  if [[ $# -eq 1 && -e $1 && $1 = *.* ]]; then
    local handler="${extension_aliases[${1##*.}]}"
    if [[ -n $local_handler ]]; then
      eval "$local_handler \"\$@\""
      return
    fi
  fi
  return 127
}

Вместо alias -s txt=nanoиспользуйте extension_aliases[txt]=nano.

У этого подхода есть ограничения. Файл должен находиться в текущем каталоге, поскольку command_not_found_handleвызывается только с именем команды, не содержащим косую черту. Также вы не получите завершение для имени файла.

Гораздо проще использовать существующие механизмы:

xdg-open word.txt

или в Debian и его производных

see word.txt

Вы получаете множество преимуществ :уже имеется системная база данных, которая сопоставляет расширения с программами, завершение будет работать и не требует какой-либо специальной обработки со стороны оболочки. Это требует немного больше ввода, но вы можете определить для него псевдоним из одного -символа (, вам понадобится пробел после него )или привязка клавиш, которая вставляет xdg-open в начало строка:

bind -x '"\eo": READLINE_LINE="xdg-open $READLINE_LINE"; READLINE_POINT+=9'
0
28.01.2020, 00:58

Теги

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