Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本-如何使用gksudo在只有一个密码提示的情况下执行连续的sudo操作?_Shell_Sudo_Gksudo - Fatal编程技术网

shell脚本-如何使用gksudo在只有一个密码提示的情况下执行连续的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/

我想使用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
我需要选择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的需求,但您已经给了我我想要的方便,谢谢!