bash скрипт просит пароль root

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

2
задан 12 October 2012 в 14:00

2 ответа

Просто используйте слово sudo перед командой в скрипте bash. И когда вы запустите файл, выберите «Открыть в терминале», вам будет предложено ввести пароль.

Например, если вы используете команды apt-get, вы можете использовать их следующим образом

#!/bin/sh
sudo apt-get update
sudo apt-get upgrade
.....
.....

Если необходимо сделать этот исполняемый файл и при двойном щелчке появится приглашение, подобное этому

enter image description here

Необходимо нажать кнопку Открыть в терминале и ввести пароль в терминале

Обновить

Как Kartick T прокомментировал, вы также можете использовать слово gksu или gksudo перед командой. Таким образом, файл может быть

gksu apt-get update
gksudo apt-get install <some-package>

Двойной щелчок скрипта спросит пароль и запустит команду после того, как вы ее предоставили.

0
ответ дан 12 October 2012 в 14:00

Я должен был несколько раз делать это, это - шаблон моих сценариев, которые должны работать как корень и предложить пользователю пароль 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 строка пытается затем проанализировать опции и если существует недействительный аргумент, это печатает использование и выходы.

Всего наилучшего

0
ответ дан 12 October 2012 в 14:00

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

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