使用Gksudo运行sudo之类的脚本

时间:2014-07-26 21:33:06

标签: linux bash shell gksudo

我是linux的新手。我试着用nemo-script挂载和卸载.iso。我把脚本/home/user/.gnome2/nemo-scripts/。我的问题是,使用gksudo我只运行一个像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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

#!/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

如果您未在脚本上设置执行权限,则会出现Permission deniedcommand not found错误。您可以通过在sudosu来电中指定外壳来执行该脚本,例如sudo bash scriptnamesu -c "bash scriptname",但最好让脚本可执行。