3

我想使用 sudo 临时挂载两个单独的网络驱动器,因为我的 NAS 设备并不总是在线,所以我不相信向 /etc/fstab 添加任何东西是必要的。

以下代码能够实现这一点,但是我不打算从终端运行脚本,因此 sudo 密码提示是我的问题:

#!/bin/sh

sudo mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8
sudo mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8

我需要选择“在终端中运行”才能从文件浏览器窗口成功运行该脚本。因此我更喜欢使用 gksudo,它会打开一个提示窗口让我输入 sudo 密码。

但是,如果我改用下面的代码,我必须输入两次 sudo 密码!

gksudo "mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8"
gksudo "mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8"

在这一点上,我尝试变得聪明并使用 gksudo 选项“以 sudo 身份运行”,如下所示,但是只有第一个驱动器像上面的第一个脚本一样安装,如果不从终端运行,则会静默失败:

gksudo -S "mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8"
sudo "mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8"

我真正想做的是以下,但我不确定是否有可能:

gksudo this{
command1
command2
command3
}

是我一个人还是 gksudo 记性不好?

4

2 回答 2

5

这是一个脚本,所以最好的方法是不要在脚本中包含sudo/命令,而是使用.gksudosudo

我不认为自己gksudo有任何记忆,这一切都是sudo在后台使用的。

另一种可能性是使用:

gksudo "sh -c 'command1; command2; ...'"

但这不是很优雅。

于 2012-05-06T11:41:49.830 回答
0

我经常使用它来确保用户以“root”身份运行我的脚本——从内存中回忆,所以我可能有一些事情可以扭转。

#!/usr/bin/env

main() {
    # Code to be executed
}

if [[ "$0" == "${BASH_SOURCE[0]}" ]]; then
    [[ $EUID != 0 ]] && exec sudo "$0" $*
    main $*
fi
于 2016-10-27T01:48:51.343 回答