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

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

в терминале, сначала он запрашивает пароль root.
а затем делать некоторые вещи с привилегиями root (я делаю это как функцию) ..
после этого в конце скрипта он закроет окно
, например «нажмите любую клавишу, чтобы закрыть окно» (я могу это сделать)

#!/bin/sh
touchpad(){
    whoami
}
sudo -S touchpad # but it return error "command not found"

как запустить функцию от имени пользователя root ?
или есть другой способ сделать это?

РЕДАКТИРОВАТЬ:
Я попробую это #! / Bin / bash

sudo ./main2.sh #this not work when i make it as a launcher
exit 

это мой текущий код (после поиска в Google):

#!/bin/bash

gksudo -m "Input Password" clear
sudo whoami
#sudo bla bla bla
read -n 1 -p "Press any key to close window"

это то, что я хочу, но получаю ошибку, если я ввел неправильный пароль 3 раза ..
как заставить выйти из главного окна, если gksudo не удается ??

4
задан 11 May 2011 в 11:48

5 ответов

Проверьте возвращаемое значение gksudo:

if ! gksudo -m "Input Password" clear ; then
    echo Bad password
    exit 1
fi
0
ответ дан 11 May 2011 в 11:48

Вы не можете. Для этого вам нужно поместить функцию в другой скрипт и запустить этот скрипт с помощью sudo.

Sudo запускает только команды, он не может получить доступ к функциям внутри вашего скрипта, так как он запускается в отдельном процессе. Если вы настаиваете на запуске функции в вашем скрипте, вы можете снова запустить скрипт с помощью sudo, но передать ему аргумент с помощью $1, который запускает функцию напрямую.

0
ответ дан 11 May 2011 в 11:48

ИМХО ... Самый простой способ запустить весь сценарий от имени пользователя root без необходимости помнить, что его нужно запускать от имени пользователя root.

0
ответ дан 11 May 2011 в 11:48

А как насчет использования gksudo? Он предложит пользователю ввести пароль. Тогда это должно работать только с sudo.

0
ответ дан 11 May 2011 в 11:48

На самом деле можно сделать это:

Предположение, что Вы зарегистрированы как, пользователь root и Вы хочет выполнить функцию для другого пользователя кроме корня, можно использовать export -f опция в Вашем сценарии для той функции. Например:

#!/usr/local/bin/bash

user="${SUDO_USER:-$USER}"
whomomlikes(){
   echo "Hello!! $(whoami)";
}
main()
{
  export -f whomomlikes;
  su $user -c "bash -c whomomlikes";
}
main;

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

0
ответ дан 1 December 2019 в 09:57

Другие вопросы по тегам:

Похожие вопросы: