2010-10-20 2 views
27

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

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

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

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

ответ

51

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

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

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

Простые и понятные. Благодаря! –

+0

Почему 'echo' для sudo, если вы можете' sudo' напрямую? –

+0

@TobiasKienzler: Потому что вопрос просил об этом. –

4

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

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

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

Смежные вопросы