Подтвердить что ты не робот

Bash скрипты, требующие пароль sudo

Я создаю установщик Bash script, который компилирует и устанавливает некоторые библиотеки для OSX и Linux. Поскольку некоторые команды в моем script ( "make install", "apt-get install", "install install" и т.д.) Требуют sudo, мне нужен пароль для ввода пароля.

В настоящее время пользователю запрашивается пароль, когда первая команда sudo собирается выполнить, но поскольку это часто происходит после этапа компиляции, всегда существует некоторое время между запуском script и необходимостью ввода пароля.

Я хотел бы поместить ввод пароля + в начале script. Также мне интересно, действительно ли это хороший способ установки системных библиотек.

В качестве альтернативы я мог бы установить библиотеки в локальную папку sandbox, которая не требует sudo, но тогда мне нужно будет сказать apt-get и macports, где для установки их библиотек, кроме стандартных/usr/local/и/opt/local, и я не уверен, как это сделать, и если это умная идея вообще.

4b9b3361

Ответ 1

Чтобы получить пароль, просто введите sudo echo "Thanks." в начало script.

Но я бы предпочел это решение:

if [[ $UID != 0 ]]; then
    echo "Please run this script with sudo:"
    echo "sudo $0 $*"
    exit 1
fi

Ответ 2

Для тех, кто не хочет поднимать весь script (чтобы ограничить риски, используя только sudo в script, где это необходимо), первая часть принятого ответа sudo echo "Thanks" работает, но не отвечает на sudo, выйдя из script. Чтобы выполнить это, скрипты, содержащие команды sudo и желающие обеспечить доступ к sudo до его использования, могут начинаться с

if [[ ! $(sudo echo 0) ]]; then exit; fi

Предостережение заключается в том, что вы полагаетесь на существование таймаута sudoers, который продлит продолжительность вашего script, чтобы подавить остальные подсказки.

Ответ 3

Еще один способ сделать это:

function checkSudo() {
    if ((EUID != 0)); then
        echo "Granting root privileges for script ( $SCRIPT_NAME )"
        if [[ -t 1 ]]; then
            sudo "$0" "[email protected]"
        else
            exec 1>output_file
            gksu "$0" "[email protected]"
        fi
        exit
    fi
}

Ответ 4

Может быть, немного легче читать:

[ $(whoami) == "root" ] || exit