linux - 使用 Gksudo 运行 sudo 等脚本

标签 linux bash shell gksudo

我是 Linux 新手。我尝试使用 nemo-script 挂载和卸载 .iso。我放置了脚本 /home/user/.gnome2/nemo-scripts/。我的问题是,使用 gksudo 我只运行 1 个命令,如 su。我可以像 su 一样运行所有这个脚本吗?

#!/bin/bash

gksudo -k /bin/echo "got r00t?"
BNAME=$(basename "$NEMO_SCRIPT_SELECTED_FILE_PATHS")

sudo mkdir "/media/$BNAME"

zenity --info --title "ISO Mounter" --text "$BNAME e $NEMO_SCRIPT_SELECTED_FILE_PATHS"

if sudo mount -o loop -t iso9660 $NEMO_SCRIPT_SELECTED_FILE_PATHS "/media/$BNAME"
then
    if zenity --question --title "ISO Mounter" --text "$BNAME Successfully Mounted. Open Volume?"
    then
        nemo /media/$BNAME --no-desktop
    fi
    exit 0
else
    sudo rmdir "/media/$BNAME"
    zenity --error --title "ISO Mounter" --text "Cannot mount $BNAME!"
    exit 1
fi

谢谢!!

最佳答案

有几种方法可以做到这一点。在上面的脚本中,如果您使用 su -c scriptsudo script 调用脚本本身,则可以使用 root 权限执行整个脚本。执行此操作之前,请编辑脚本并删除对 gksudosudo 的调用。然后在脚本顶部添加一个测试,以确保脚本使用有效的根 UID 运行。例如:

#!/bin/bash

if test "$UID" -eq 0 ; then
    printf "Running script as root\n"
else
    printf "error, this script can only be run by root\n"
    exit 1;
fi

然后确保您以 sudo scriptnamesu -c scriptname 运行脚本。此外,确保您拥有脚本文件权限的执行位集。您可以简单地使用chmod 0775 scriptname来完成此操作,它将授予ownergroup读-写-执行权限,并授予world读-执行权限。如果您不希望它是全局可执行文件,那么只需 chmod 0774

如果您没有对脚本设置执行权限,您将收到权限被拒绝找不到命令错误。您可以通过在 sudosu 调用中指定 shell 来执行脚本,例如sudo bash scriptnamesu -c "bash scriptname",但最好使脚本可执行。

关于linux - 使用 Gksudo 运行 sudo 等脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975723/

相关文章:

linux - Joomla - 受版本控制 (svn) 的网站的文件权限和所有者

bash - 在 Ubuntu 中创建快捷方式或脚本

linux - 如何使用 shell 解析 diskstats 并以 JSON 格式输出?

bash - 将 sudo 与 for 循环一起使用

c - Linux Fork 进程终止

linux - 并行运行两个 shell 脚本并捕获它们的输出

linux - 当 SIGCANCEL 被发送到线程时会发生什么?

linux - 2g 在 sed 中无法跳过第一次出现的匹配项

c - 读取特定格式的字符串

shell脚本错误状态和语法检查