Попросите пользователя войти в систему под учетной записью root при запуске сценария оболочки

Проблема, которую я получаю, когда я вхожу в команду,

su - root 

в начале файла сценария оболочки, он предлагает пользователю ввести пароль, а затем не будет продолжать работу с остальным сценарием оболочки. Затем мне нужно вручную найти и запустить сценарий оболочки через терминал. Я хочу, чтобы скрипт удостоверился, что пользователь входит в систему с правами root, а затем продолжит работу с остальной частью сценария оболочки.

Другими словами, я хочу запустить скрипт как любой пользователь, но как только скрипт начнет выполняться, пользователь должен изменить его на root, а затем продолжить с остальной частью скрипта как root до его завершения. Это можно сделать?

  • изменения в членстве в группе домена, не отображаемые для пользователя в SLES 11 SP3
  • Какова связь между SLED и OpenSUSE?
  • Как узнать, какие пакеты мне не хватает?
  • Файл openSuse /etc/profile.local не существует
  • Как отключить автообследование DVD-дисков в SLES 11 SP2?
  • Как получить xconsole для отображения сообщений в системе с помощью journald?
  • Настройка xinetd для OpenSuSE
  • Тупик в кронабе между cron и его дочерними несуществующими процессами
  • 4 Solutions collect form web for “Попросите пользователя войти в систему под учетной записью root при запуске сценария оболочки”

    Это очень легко сделать:

     #!/bin/sh [ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@" 

    Когда текущий пользователь не является root, повторно выполните скрипт через sudo .

    Обратите внимание, что я использую sudo здесь вместо su . Это связано с тем, что он позволяет сохранять аргументы. Если вы используете su , ваша команда должна быть su -c "$0 $@" которая будет искажать ваши аргументы, если у них есть пробелы или специальные символы оболочки.

    Если ваша оболочка bash, вы можете избежать внешнего вызова whoami :

     (( EUID != 0 )) && exec sudo -- "$0" "$@" 

    Вы также можете проверить UID:

      if [ $(id -u) != 0 ]; then echo "You're not root" # elevate script privileges fi 

    Вы можете вызвать сам сценарий и проверить:

     #! /bin/bash if [ "root" != "$USER" ]; then su -c "$0" root exit fi ... 

    В тот момент, когда вы хотите войти в систему, просто добавьте следующую команду

     sudo su 

    Это отлично работает с моим кодом

    Linux и Unix - лучшая ОС в мире.