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