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

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

su - root 

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

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

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 

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

  • Масштабирование экрана в SUSE LEAP
  • резервное копирование в реальном времени, если файл изменился?
  • Как узнать узел устройства, соответствующий моему устройству в SuSE 8?
  • Файл конфигурации RAID отсутствует
  • Замена sntp для аргумента -P (подсказка)
  • Почему имена в файле «/ etc / HOSTNAME» отличаются от имени и имени хоста в SLES11SP3?
  • openSUSE: переключение с Wicked на NetworkManager с помощью командной строки
  • Как установить Kubernetes на Linux SUSE?
  • Ошибка настройки GCC
  • Разрешения, измененные на / dev / nvidia *, когда GPU получил доступ как root на SUSE
  • Как добавить систему SLED 11 в домен Windows
  • Где я могу получить пакет «kernel-default-debuginfo» для SLES 11?
  • Linux и Unix - лучшая ОС в мире.