Простой bash-скрипт для запуска редактора

    Я совсем начинающий убунтовод. Хочу поделиться своим первым простым bash-скриптом:

    #!/bin/bash
    if [ -z "$1" ]; then
    gedit
    exit 0
    fi
    test ! -e "$1" && gedit "$1" || $(test -w "$1" && gedit "$1" || gksu gedit "$1")

    Краткое пояснение (для тех, кому и так понятно и влом читать мою словесную пургу):

    Перед запуском редактора проверяет, есть ли у пользователя права на изменение файла. Если прав нет, то запускает редактор от имени суперпользователя.
    (Если входной файл не указан, то открывает редактор от имени простого пользователя)

    Длинное пояснение (для тех, кому читать не влом):

    Как вы обычно редактируете текстовые файлы? Если вы запускаете из терминала gedit, vi, nano и т.д., то скрипт, наверное, не для вас.
    Я по старой привычке в gnome-commander (или в другом файл-менеджере) жму F4.
    А теперь – ситуация, с которой я уже неоднократно сталкивался. Нужно мне отредактировать какой-то файл, который, как выясняется, имеет ограниченные права доступа. Например, хочу добавить новый репозиторий. Нахожу файл sources.list, жму F4, редактирую, пытаюсь сохранить и… получаю сообщение о нехватке прав. Ну да, конечно, мне же надо было запустить редактор от имени суперпользователя, да знаю я, знаю… Только вот что теперь-то делать? Была бы прямо тут кнопка типа «change current user…», так ведь нету. Поэтому приходится копировать весь текст, закрывать редактор, открывать терминал, опять искать нужный каталог, запускать руками gksu gedit sources.list, вводить пароль, вставлять сохраненный текст и, наконец, сохранить изменения. Не слишком ли неэргономично?
    Если всегда запускать gnome-commander или gedit от имени суперпользователя, то это, конечно, решит проблему, но такой подход, очевидно, плох.

    Поэтому я придумал такое решение:
    1. Создем текстовый файл с названием edit
    2. Вставляем в него приведенный выше код
    3. Сохраняем
    4. Даем этому файлу права на выполнение
    5. Кладем его в /usr/local/bin
    6. В настройках gnome-commander (или вашего любимого файл-менеджера) для редактирования назначаем команду edit %s
    Из командной строки тоже можно вызывать edit [file name].

    PS: gedit можно поменять на ваш любимый редактор. Если он консольный, то gksu можно поменять на sudo.

    UPD: Неправильно обрабатывались файлы с пробелом в имени. Спасибо bappoy, исправил.

    Комментарии 9

    • НЛО прилетело и опубликовало эту надпись здесь
        0
        ln -s /usr/bin/vim /usr/bin/vi
          0
          alias vi=vim в ~/.bashrc, но это создаст ложную иллюзию правильности

          лучше раз двадцать подряд в текстовом редакторе напишите vim file.txt, пусть пальцы запомнят.
          +1
          В принципе сойдет для личного использования, только $1 надо заключить в кавычки, потому что если пользователь захочет отредактировать файл «preved medved.txt», то редактор получит два аргумента «preved» и «medved.txt».

          И в общесистемный /usr/local/bin ничего класть не надо, можно ограничиться чем-то вроде ~/bin/edit.sh.
            +1
            Спасибо, внёс изменения касательно кавычек.
            +1
            Можно кстати вместо повторения команды писать "!!" ( в эту переменную сохраняется последняя команда ). И последнюю часть скрипта заменить на «sudo !!»
              0
              А почему бы не сделать с else, логичней будет
                0
                мне тут подсказывают элегантное решения для vim

                Добавте строчку

                cmap w!!! %!sudo tee > /dev/null %

                в ~/.vimrc и делайте :w!!! чтобы сохранить с sudo
                  0
                  это как: набери :q! чтобы дать vi понять, что вы собираетесь действительно выйти.

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

                Самое читаемое