Я хочу, чтобы у меня был скрипт, который я мог бы подарить друзьям, который будет добавлять репозитории и загружать файлы, устанавливать их без использования команд, так как они не предназначены для командной строки и не желают учиться. Мне нужно знать, как заставить скрипт запрашивать пароль root, чтобы они могли выполнять некоторые из этих функций. Как бы я пошел по этому поводу? Пожалуйста, не ненавидите их ... Заставить их начать использовать Linux было большим шагом, и я просто счастлив, что они пытаются что-то новое ... и это было в мире открытого исходного кода ..
Просто используйте слово sudo
перед командой в скрипте bash. И когда вы запустите файл, выберите «Открыть в терминале», вам будет предложено ввести пароль.
Например, если вы используете команды apt-get
, вы можете использовать их следующим образом
#!/bin/sh
sudo apt-get update
sudo apt-get upgrade
.....
.....
Если необходимо сделать этот исполняемый файл и при двойном щелчке появится приглашение, подобное этому
Необходимо нажать кнопку Открыть в терминале и ввести пароль в терминале
Как Kartick T прокомментировал, вы также можете использовать слово gksu
или gksudo
перед командой. Таким образом, файл может быть
gksu apt-get update
gksudo apt-get install <some-package>
Двойной щелчок скрипта спросит пароль и запустит команду после того, как вы ее предоставили.
Я должен был несколько раз делать это, это - шаблон моих сценариев, которые должны работать как корень и предложить пользователю пароль root.
#!/usr/bin/env bash
cmdname=$(basename $)
function usage() {
echo
echo "$cmdname [-l|--location] /location/to/package [-p|--no-provisioning]"
echo " -l | --location Set the location to be used to find the package install"
echo " -p | --no-provision If set, will not load the example provisioning"
exit 1
}
if [ "$(whoami)" != "root" ]; then
echo "You must be root to do this"
su -c "$0 $*"
exit
fi
LOCATION="/tmp/TESTPKG$USER/"
PROVISION=1
OPTIONS=$(getopt -o l:p --long location:,no-provisioning -n "$cmdname" -- $*) || usage
eval set -- $OPTIONS
while true ; do
case $1 in
-l|--location)
LOCATION=$2
shift 2;;
-p|--no-provisioning)
PROVISION=0
shift 1;;
--) shift ; break ;;
*)
echo "Invalid argument $1"
exit 1;;
esac
done
Вышеупомянутое для определенного варианта использования, но я думаю, что оно выделяет две хороших функции, с помощью getopt
и прося корневое разрешение и выполняя команду, при передаче в аргументах.
Так if block
проверьте, является ли пользователь в настоящее время корнем, в противном случае запускает названный скрипт ($0
) с любыми аргументами, переданными сценарию ($*
). Затем это выходит, относительно не пытаются запустить скрипт как некорневого пользователя.
getopt
строка пытается затем проанализировать опции и если существует недействительный аргумент, это печатает использование и выходы.
Всего наилучшего