Сценарий Ubuntu, который выполняет команды после su - пользователь

Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-31-универсальный x86_64)

GNOME Shell 3.28.4

Удар GNU, версия 4.4.20 (1) - выпуск (x86_64-pc-linux-gnu)

Как правило, su - user назван в терминале, и пользователь затем вводит в большем количестве команд, но в моем случае, я пишу сценарий, который должен войти в пользователя (было бы username@pcname:~$ перед каждой строкой, не уверенной, если Вы звоните, которые входят в систему), и затем, выполняют команды, которые обычно вводились бы

Я должен сделать это, потому что эти команды sudo apt install редактор в моем пользователе и, кажется, не работает каждый раз, когда существует нет username@pcname:~$ в начале каждого выравнивает

Я знаю, что существует a -c флаг. Но насколько я могу сказать, -c отметьте просто выполняет команды под su поскольку я добираюсь -su: MyCommand: command not found.

su - Username -c "some_commands;some_other_commands"

su - Пользователь правильный способ достигнуть этого? (username@pcname:~$) Что я делаю неправильно?

Любая справка будет значительно цениться :)

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

1
задан 21 October 2019 в 12:40

1 ответ

Когда мой рабочий стол обычного пользователя должен запустить скрипт, требующий sudo, я создаю запись как это:

eyesome desktop entry.png

Затем я пишу сценарий обертки в пути для подъема до sudo уровень:

$ cat /usr/local/bin/eyesome-cfg-desktop-wrapper.sh

#!/bin/bash

# NAME: eyesome-cfg-desktop-wrapper.sh
# PATH: /usr/local/bin
# DESC: Wrapper script to call `eyesome-cfg.sh`
# DATE: Sep 24, 2018. Modified June 6, 2019

# NOTE: Designed to be called from ~/Desktop/eyesome-cfg.desktop

# UPDT: 2019-06-06 Name change to reflect wrapper script.

PROGNAME="eyesome-cfg.sh"

tty -s;
if [[ "0" == "$?" ]]; then
    echo "$PROGNAME cannot be called from background process."
    exit 1
fi

if [[ $EUID != 0 ]]; then

    # Get sudo password
    Password=$(zenity --password --title="Password for $PROGNAME")
    encryptPassword=$(echo -n "$Password" | md5sum)

    # After viewing encrypted password once, comment out line below.
    # echo "md5sum: $encryptPassword" 

    # Set value in quotes below to encryped password revealed above.
    if [[ "$encryptPassword" != "005e160c7bcfacf3d818d66e5856d75a  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi

fi # non-terminals can't enter password.

# Call eyesome-cfg.sh with any parameters passed to this wrapper sript
if [[ $EUID == 0 ]]; then
    sudo "$PROGNAME" "$@" # Already running as sudo.
else
    echo $Password | sudo -S "$PROGNAME" "$@"
fi

exit 0

Примечание в первый раз Вы запускаете скрипт, удаляют комментарий (#) об этой строке:

    # echo "md5sum: $encryptPassword" 

Затем сценарий отобразит Ваш зашифрованный пароль. Возьмите тот зашифрованный пароль и введите его пара строк ниже:

    if [[ "$encryptPassword" != "005e160c7bcfacf3d818d66e5856d75a  -" ]]; then

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

1
ответ дан 7 December 2019 в 14:57

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

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