именно я хочу сделать скрипт и добавить его в панель быстрого запуска ...
когда я дважды щелкаю по значку, он открывает окно терминала (готово)
в терминале, сначала он запрашивает пароль 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 не удается ??
Проверьте возвращаемое значение gksudo:
if ! gksudo -m "Input Password" clear ; then
echo Bad password
exit 1
fi
Вы не можете. Для этого вам нужно поместить функцию в другой скрипт и запустить этот скрипт с помощью sudo.
Sudo запускает только команды, он не может получить доступ к функциям внутри вашего скрипта, так как он запускается в отдельном процессе. Если вы настаиваете на запуске функции в вашем скрипте, вы можете снова запустить скрипт с помощью sudo, но передать ему аргумент с помощью $1
, который запускает функцию напрямую.
ИМХО ... Самый простой способ запустить весь сценарий от имени пользователя root без необходимости помнить, что его нужно запускать от имени пользователя root.
А как насчет использования gksudo? Он предложит пользователю ввести пароль. Тогда это должно работать только с sudo.
На самом деле можно сделать это:
Предположение, что Вы зарегистрированы как, пользователь 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;
Не то, чтобы это только работало бы на экспортируемую функцию, если Вам объявили переменные в других функциях затем, необходимо экспортировать их так же и затем выполнить их соответственно.