在 su - 用户之后运行命令的 Ubuntu 脚本

在 su - 用户之后运行命令的 Ubuntu 脚本

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我创建如下条目:

eyesome 桌面条目.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

当然,这一切都是可选的,您可以跳过加密,将密码以普通文本的形式编码到脚本中,以供任何人阅读。但我不会这么做……

相关内容