LINUX.ORG.RU

Функция которая удаляет блок кода в другом файле bash

 ,


0

2

Доброго времени суток. Скрипт нацелен на включение/отключение разгона. Подскажите как правильно реализовать сабж. Имеется файл ~/.bashrc, после запуска скрипта и выбора опции install скрипта туда скидывается такой блок

# Warning, there clocks are default on Geforce 710m 
optirun() {
    local GPUOffset=-10
    local MemOffset=-1100
    ({
        $(which optirun) nvidia-settings -c :8 \
        -a [gpu:0]/GPUGraphicsClockOffset[2]=$GPUOffset \
        -a [gpu:0]/GPUMemoryTransferRateOffset[2]=$MemOffset
    } 2>/dev/null & )
    $(which optirun) $@
}
Хочу реализовать удаление этого блока когда опция uninstall, знаю что можно sed'ом удалять но думаю что не правильно так как кучу строк плодить для удаление каждой строки.

Deleted

Можно добавлять/удалять в/из /etc/profile.d.

ArcFi ()

А не проще сделать так:

optirun() {
    if [ -n GPUBOOST ]; then
        local GPUOffset=-10
        local MemOffset=-1100
        ({
            $(which optirun) nvidia-settings -c :8 \
            -a [gpu:0]/GPUGraphicsClockOffset[2]=$GPUOffset \
            -a [gpu:0]/GPUMemoryTransferRateOffset[2]=$MemOffset
        } 2>/dev/null & )
        $(which optirun) $@
    else
        # На тот случай, если баш не захочет ничего выполнять, лол.
        xargs $@
    fi
}

И делать вместо "установки" и "удаления" простой export GPUBOOST="whatever" / unset GPUBOOST.

А эти твои манипуляции с файлом как минимум требуют релогина.

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

Только всё же [[ $GPUBOOST ]], а не [ -n GPUBOOST ]

В принципе идея с удалением блока кода тоже нормальная, но по-моему было бы корректнее обособлять этот блок комментарием и удалять именно по комментарию, а не по признакам начала/конца.

Иначе считать просто символ «}» в начале строки непременно «закрывающим» для функции optirun - немного наивно и криво (в таком случае «правильное» решение - это прямо-таки полноценный парсинг bash-кода на предмет поиска нужной скобки, закрывающей блок кода функции).

Ну и да, я, если не ленюсь, подключаю внешние функции из каталога$HOME/.bash/logon - если сделать так, по человечески, тогда автору и удалять куски кода из .bashrc не нужно будет - достаточно просто файл функции (или ссылку на него) из $HOME/.bash/logon грохнуть.

DRVTiny ★★★★★ ()
Ответ на: комментарий от DRVTiny

Я так и сделал(По комментарию удаляю)

Deleted ()
Ответ на: комментарий от DRVTiny

Только всё же [[ $GPUBOOST ]], а не [ -n GPUBOOST ]

Я был уставший, и даже не проверял код, который написал.

В принципе идея с удалением блока кода тоже нормальная, но по-моему было бы корректнее обособлять этот блок комментарием и удалять именно по комментарию, а не по признакам начала/конца.

Да нет, чушь это. Давай уж вместо .so удалять и добавлять код и перекомпиливать всё.

Иначе считать просто символ «}» в начале строки непременно «закрывающим» для функции optirun - немного наивно и криво (в таком случае «правильное» решение - это прямо-таки полноценный парсинг bash-кода на предмет поиска нужной скобки, закрывающей блок кода функции).

lookbehind/lookahead для одной простой функции — это уж сильно накладно, не?

Ну и да, я, если не ленюсь, подключаю внешние функции из каталога$HOME/.bash/logon - если сделать так, по человечески, тогда автору и удалять куски кода из .bashrc не нужно будет - достаточно просто файл функции (или ссылку на него) из $HOME/.bash/logon грохнуть.

Вот это нормальный метод.

r3lgar ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.