shell脚本-如何使用gksudo在只有一个密码提示的情况下执行连续的sudo操作?
我想使用sudo临时挂载两个独立的网络驱动器,因为我的NAS设备并不总是在线,所以我不认为有必要向/etc/fstab添加任何内容 以下代码能够实现这一点,但是我不打算从终端运行脚本,因此sudo密码提示是我的问题:shell脚本-如何使用gksudo在只有一个密码提示的情况下执行连续的sudo操作?,shell,sudo,gksudo,Shell,Sudo,Gksudo,我想使用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/
#!/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
我需要选择run-in terminal才能从文件浏览器窗口成功运行该脚本。因此,我更喜欢使用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
}
这是一个脚本,所以最好的方法不是在脚本中使用sudo/gksudo命令,而是使用sudo调用脚本 我不认为gksudo本身有任何内存,这都是SUDO在后台使用的功能 另一种可能是使用:
gksudo "sh -c 'command1; command2; ...'"
但是这不是很优雅。我经常使用它来确保用户以根用户的身份从内存中调用脚本,因此我可能会有一些改变
#!/usr/bin/env
main() {
# Code to be executed
}
if [[ "$0" == "${BASH_SOURCE[0]}" ]]; then
[[ $EUID != 0 ]] && exec sudo "$0" $*
main $*
fi
在我的家庭电脑这个混乱的世界里,我想我可以处理一个不雅观的解决方案,尤其是当它完全实现了我想要做的事情时。优雅的解决方案是将驱动器添加到/etc/fstab,从而消除了对sudo的需求,但您已经给了我我想要的方便,谢谢!