всегда запрашивать пользователя перед выполнением команды в оболочке

Существует ли утилита, которая всегда запрашивает у пользователя подтверждение перед выполнением команды, аналогичной тому, как sudo запрашивает пароль?

8
задан 19 January 2011 в 07:33

2 ответа

Вы хотите, чтобы это работало без ввода дополнительной команды, например

$ rm file

Или только когда пользователь печатает что-то вроде

$ confirm rm file

Или только когда пользователь пытается выполнить определенные команды, например

$ rm file

, но не для

$ echo "Hello"

Если опция 1, это можно сделать с помощью перехвата preexec в zsh или ловушки DEBUG в bash.

Если вариант 2, поместите что-то вроде этого в /etc/bash.bashrc или другой файл запуска оболочки.

confirm() {
    echo -n "Do you want to run $*? [N/y] "
    read -N 1 REPLY
    echo
    if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
        "$@"
    else
        echo "Cancelled by user"
    fi
}

Если выбрана опция 3, вы можете изменить сценарий confirm, описанный выше, или у некоторых команд есть возможность спросить, прежде чем что-то делать, например, rm -i. Вы можете поместить alias rm='rm -i' в /etc/bash.bashrc.

0
ответ дан 19 January 2011 в 07:33

Я немного поиграл с bash и понял, как это можно сделать.

#!/bin/bash

debug_trap () {
    echo "executing $BASH_COMMAND"
    echo "Allow?"
    select choice in yes no
    do
        if [ "$choice" = "yes" ]
        then break
        elif [ "$choice" = "no" ]
        then return 1
        fi
    done
}

shopt -s extdebug
trap debug_trap DEBUG

Вы можете сохранить этот сценарий, скажем, confirm-any-command.sh и source в своем bashrc. Он будет запрашивать подтверждение каждой команды, которую вы попытаетесь выполнить.

Пожалуйста, обратите внимание, что это не что иное, как проверка концепции; Я сомневаюсь, что это действительно может быть полезным в этой форме. Если вам придется подтверждать каждую введенную вами команду, вы очень скоро приобретете привычку автоматически нажимать «да» после каждой команды. Ваше умственное отображение «конца команды» изменится с Enter на Enter , y e s , Enter - вы будете печатать его целиком, даже не пытаясь потратить некоторое время на проверку того, что вы действительно хотите, чтобы эта команда выполнялась. Это контрпродуктивно и вам не поможет.

0
ответ дан 19 January 2011 в 07:33

Другие вопросы по тегам:

Похожие вопросы: