我想使用 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记忆力短?
脚本,所以最好的方法是不要在脚本中包含 sudo
/gksudo
命令,而是使用 sudo
调用脚本。
我不认为gksudo
本身有任何记忆,这就是sudo
所做的一切,这是在后台使用的。
另一种可能性是使用:
gksudo "sh -c 'command1; command2; ...'"
但这不是很优雅。
我经常使用它来确保用户以"root"身份运行我的脚本 - 从内存中调用,所以我可能会有几件事。
#!/usr/bin/env
main() {
# Code to be executed
}
if [[ "$0" == "${BASH_SOURCE[0]}" ]]; then
[[ $EUID != 0 ]] && exec sudo "$0" $*
main $*
fi