Zero Command Guard – Больше никаких случайностей!

Скрипт Zero Command Guard – Больше никаких случайностей! 1.0

Создайте и подтвердите аккаунт для скачивания
Поддерживаемые версии
  1. Отсутствует
🌐 Описание:

Простенький скрипт для ~/.bashrc который запрашивает подтверждение команд или команд с опасными аргументами, перед её выполнением.

1000096607.jpg


Он срабатывает только когда вы вводите команду в терминале, он не мешает скриптам и пайпам (echo y | rm).

Для справки – скрипт не требует подтверждение (допустим команды rm *) для каждого удаляемого файла, при вводе rm * выведется:

1000096636.jpg


И при подтверждении удаляется все перечисленные файлы.

😎 Как использовать?

1. Кидаете код в конец ~/.bashrc
2. Пишете source ~/.bashrc
3. Профит.

Вот сам скрипт:

Код:
if [[ $- == *i* ]]; then
    _command_guard() {
        local cmd="$1"
        shift

        if [[ ! -t 0 ]]; then
            command -- "$cmd" "$@"
            return $?
        fi

        local args_str
        args_str=$(printf "%q " "$@")
       
        printf "\033[1;31m[ЗАЩИТА]\033[0m Вы точно хотите выполнить: %s%s? [y/N]: " "$cmd" "${args_str:+ ${args_str% }}"
       
        local reply
        read -r reply < /dev/tty
       
        if [[ "$reply" == [YyНн] || "$reply" == yes || "$reply" == да ]]; then
            command -- "$cmd" "$@"
            return $?
        else
            printf "\033[1;32mДействие отменено.\033[0m\n"
            return 1
        fi
    }

    _has_danger_args() {
        local danger_patterns=($1)
        shift
        local arg pattern
        for arg in "$@"; do
            [[ "$arg" == "--" ]] && return 1
            if [[ "$arg" == --* ]]; then
                for pattern in "${danger_patterns[@]}"; do
                    [[ "$arg" == "$pattern" ]] && return 0
                done
            elif [[ "$arg" == -* ]]; then
                for pattern in "${danger_patterns[@]}"; do
                    [[ "$pattern" != --* && "$arg" == *"$pattern"* ]] && return 0
                done
            fi
        done
        return 1
    }

    rm() {
        if _has_danger_args "r R --recursive" "$@"; then
            _command_guard rm "$@"
        else
            command -- rm "$@"
        fi
    }

    chmod() {
        if _has_danger_args "R --recursive" "$@"; then
            _command_guard chmod "$@"
        else
            command -- chmod "$@"
        fi
    }

    chown() {
        if _has_danger_args "R --recursive" "$@"; then
            _command_guard chown "$@"
        else
            command -- chown "$@"
        fi
    }

    deluser() { _command_guard deluser "$@"; }
    userdel() { _command_guard userdel "$@"; }
    delgroup() { _command_guard delgroup "$@"; }
    groupdel() { _command_guard groupdel "$@"; }
    dd() { _command_guard dd "$@"; }
    shred() { _command_guard shred "$@"; }
    usermod() { _command_guard usermod "$@"; }
    sfdisk() { _command_guard sfdisk "$@"; }
    fdisk() { _command_guard fdisk "$@"; }
    parted() { _command_guard parted "$@"; }
    mkfs() { _command_guard mkfs "$@"; }
fi

Вообще, вы можете подставлять одобрение к каким угодно вам командам. Просто подставляете строчку

Код:
rm() { _command_guard rm "$@"; }

и заменяете rm на нужную вам команду.

Чтобы добавить новые опасные аргументы, введите:

Код:
rm() {
    if _has_danger_args "r R --recursive" "$@"; then
        _command_guard rm "$@"
    else
        command -- rm "$@"
    fi
}

Замените rm на нужную вам команду и перечислите в _has_danger_args все опасные аргументы вашей команды, через пробел. Теперь только при вводе указанной команды с перечисленными аргументами нужно будет подтверждение. Внимание! Для команд в <команда>() { _command_guard <команда> "$@"; } всё равно всегда нужно будет подтверждение (так вообще лучше не делать одновременно с указанными опасными аргументами).

🧩 Требования:

Оболочка Bash хотяб 3.2
Терминал с поддержкой ANSI цветов (Почти все современные SSH клиенты).
Классификация ПО
  1. Другое
Операционная система
  1. Linux
Набор технологий
Bash, ANSI Escape Sequences, printf, Exit Codes
Автор
Art_Farm
Скачивания
1
Просмотры
125
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Art_Farm

Поделиться ресурсом

Назад
Сверху Снизу