通过zenity询问用户密码,仅在bash脚本中一次



我正在创建一个bash脚本来执行存储在数组中的某些任务,其中一些需要提高权限。这是我使用Zenity的当前方法:

#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
    password=$1 
    echo $password | sudo -S fdisk -l
}
function2()
{
    password=$1 
    echo $password | sudo -S fdisk -l
}
password=$(zenity --password)
for i in ${!functions[@]}
do
    ${functions[$i]} $password
done

但是我想避免每次传递密码,与此类似:

#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
    sudo -S fdisk -l
}
function2()
{
    sudo -S fdisk -l
}
password=$(zenity --password)
# Become superuser here with given password
for i in ${!functions[@]}
do
    ${functions[$i]}
done

我知道通常的方法是拥有一个分开的脚本,但是在这种情况下,我只需要在一个脚本中完成工作。我已经尝试过:

echo $password | sudo -S ${functions[$i]}

但随后bash抛出" sudo:function1:找不到订单"错误。谁能告诉我我在这里做错了什么?

编辑:此处的目标是在某一时刻成为超级用户,而曼丹·苏多(Mantain Sudo)特权(无需使用sudo调用脚本),或者仅在一行代码中使用密码变量。有可能吗?

只使用全局变量。

functions=("function1")
functions+=("function2")
function1()
{    
    echo "$password" | sudo -S fdisk -l
}
function2()
{    
    echo "$password" | sudo -S fdisk -l
}
password=$(zenity --password)
for i in ${!functions[@]}
do
    ${functions[$i]}
done

我不知道这是多么可行,但是我将密码放入安全的文本文件中,并每次运行脚本时都将密码输入变量:p> password=$(echo cat /usr/sec_pass)

然后使用$ {password}将密码通过管道发送到命令。

相关内容

  • 没有找到相关文章

最新更新