Ubuntu 18.04.3 LTS(GNU/Linux 5.0.0-31-通用 x86_64)
GNOME Shell 3.28.4
GNU bash,版本 4.4.20(1)-发布(x86_64-pc-linux-gnu)
通常,su - user
在终端中调用,然后用户输入更多命令,但在我的例子中,我写的是脚本需要登录用户(username@pcname:~$
每行前面都会有,不确定是否称之为登录),然后运行通常会输入的命令
我需要这样做,因为这些命令在我的用户中被编辑,并且当每行开头sudo apt install
没有时似乎不起作用username@pcname:~$
我知道有一个-c
标志。但据我所知,标志只会运行我得到的-c
命令。su
-su: MyCommand: command not found
su - Username -c "some_commands;some_other_commands"
su - User 是实现此目的的正确方法吗?(username@pcname:~$
)我做错了什么?
任何帮助将不胜感激 :)
顺便说一句,之前问的是怎样编写脚本来执行此操作,但是它变得过于复杂、具体且令人困惑,所以我将范围缩小到这个问题。
答案1
当我的普通用户桌面需要运行一个脚本时,要求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
当然,这一切都是可选的,您可以跳过加密,将密码以普通文本的形式编码到脚本中,以供任何人阅读。但我不会这么做……