2009-10-29 6 views
11

У меня есть скрипт bash, который устанавливает какое-то программное обеспечение. Я хочу сбой как можно скорее, если он не запускается root. Как я могу это сделать?bash: fail, если скрипт не запускается root

+1

Хотя я бы * вообще * рассмотреть это глупое поведение: * Пусть работать до тех пор, пока права не в состоянии *; система может быть настроена так, что операция может быть успешно выполнена как текущий пользователь и принудительно загнать эту опцию. [Мне пришлось исправить скрипты, которые ранее делали подобные предположения]. С другой стороны, я делаю гораздо больше, чтобы * предотвратить * доступ или отображение большого жира предупреждения, если они выполняются как root. – 2009-10-29 06:55:59

+0

Вам следует попробовать использовать sudo. Под Linux, когда вы устанавливаете что-либо, вам нужно быть root, чтобы обычные пользователи не устанавливали ничего, что могло бы повредить систему. – masterLoki

+1

Он хочет, чтобы его сценарий учитывал, что некоторые люди могут забыть или не знать о sudo (или других средствах повышения привилегий). Его хорошая практика - проверить работоспособность во время работы, прежде чем пытаться сделать что-нибудь еще. –

ответ

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

Источник: http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

или, чтобы сохранить его короче, проверьте UID env: , если [[$ UID -ne 0]]; затем – zlack

+1

@zlack $ UID предоставит исходный UID пользователя, если скрипт запускается через 'sudo', в то время как David's рассмотрит сценарий как выполняемый как root. В зависимости от того, что вы делаете, Дэвид, вероятно, лучше. – pr1001

+0

Как говорит pr1001, UID не будет работать, если пользователь запускает скрипт с использованием sudo, но EUID будет работать нормально. – Tom

5

После покопаться на этом, консенсус, кажется, что нет необходимости использовать id -u в Баш, как переменная (эффективный идентификатор пользователя) EUID будет установлен. В отличие от UID, EUID будет 0, если пользователь root или использует sudo. По-видимому, это примерно в 100 раз быстрее, чем при запуске id -u:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

Источник: https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

это не работает в оболочке Bourne. есть ли у вас какие-либо строго совместимые с POSIX решения? –

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