В пакете 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
Полное руководство вы можете прочитать по этой ссылке.
Как насчет 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'