Авторизация

Вы можете войти через одну из учетных записей:

ИЛИ



Напомнить пароль
Регистрация

ЗаметкиИспользование функций() bash

Для упрощения работы, bash позволяет добавлять функции в .bash_profile (или .bashrc), которые будут доступны для использования наравне с прочими командами.
На примере я покажу, как это работает.

Я добавлю в .bash_profile функцию для быстрого запуска файлов-заметок vimoutliner. Вкратце, vimoutliner — это набор плагинов и подсветка синтаксиса файлов с расширением .otl для vim, которые позволяют вести древовидные заметки.

Вот код функции в .bash_profile:


$ cat .bash_profile

outliner() {
        # путь к директории с файлами заметок; "$username" следует заменить на имя пользователя
        OUTLINER_DIR="/home/$username/outliner"
        # вложенная функция для вывода справки
        outliner_help () {
                # опция -e в echo включает отображение "backslash escapes"; например \n - переход на следующую строку, \t -табуляция
                echo -e "Usage:"
                echo -e "\toutliner FILE\topen or create outliner FILE"
                echo -e "\toutliner -l\tlist outliner directory"
        }
        # если отсутствуют аргументы при запуске функции (т.е. отсутствует $1), вывести справку и завершить выполнение функции с кодом возврата 1 ("ошибка")
        if [ -z $1 ]; then
                outliner_help;
                return 1;
        # если в качестве аргумента выступает "-l", вывести список файлов в директории $OUTLINER_DIR
        elif [[ "$1" == "-l" ]]; then
                ls $OUTLINER_DIR;
        # если существует файл "$1.otl" в директории $OUTLINER_DIR, запустить vim, передав ему в качестве аргумента путь к этому файлу
        elif [ -e "$OUTLINER_DIR/$1.otl" ]; then
                vim "$OUTLINER_DIR/$1.otl";
        # если файл не существует, предложить его создание и запуск vim с путем к созданному файлу в качестве аргумента (фактически файл создаст vim, при сохранении, а не эта функция)
        else
                echo "No such file "$OUTLINER_DIR/$1.otl""
                echo "Create new file "$OUTLINER_DIR/$1.otl" (y/N)?"
                # считываем ответ пользователя; если "y" или "Y" - создаем файл, если что либо другое - нет; по-умолчанию "нет" (если просто нажать Enter)
                read CREATE_NEW
                if [[ "$CREATE_NEW" == "y" || "$CREATE_NEW" == "Y" ]]; then
                        vim "$OUTLINER_DIR/$1.otl" || echo -e "\tSomething is wrong!" ;
                else
                        echo "exit"
                fi
        fi
}

В результате, вместо того, что бы запускать команду
$ vim outliner/file.otl

достаточно выполнить
$ outliner file

При этом предполагается, что все файлы с заметками будут хранится в одной директории и, если вы забыли имя нужного файла, можно его посмотреть, запустив функцию с параметром "-l".

Следует учитывать, что данная функция будет подгружаться к каждой копии bash и это может повлечь за собой дополнительные расходы памяти (незначительные), так что, для избежания этого, лучше реализовать вышеописанный метод не в виде bash-функции, а bash-скриптом. Так же следует помнить, что после добавления функций в .bash_profile они будут доступны только для новых копий bash (т.е. в том же терминале, в котором редактировался .bash_profile функции работать не будут, но в новосозданном терминале — да). Напоследок добавлю, что автодополнение ввода работает для bash-функций так же, как и для обычных команд.

Ну и итогом нашей лабораторной работы)) можно считать то, что мы научились использовать bash-функции, которые можно считать неким аналогом bash-alias'ов, но которые позволяют выполнять сразу несколько команд и обладают всеми возможностями bash-скриптов, тем самым упрощая себе работу в терминале.
  • 0
  • Diesel
  • 31 октября 2010, 12:57
  • add twitter 

Комментарии (0) Вконтакте (0) facebook (0)

Комментарии (0)

rss свернуть / развернуть

Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.