在 bash 脚本中仅通过 Zenity 请求用户密码一次

问题描述 投票:0回答:2

我正在创建一个 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: order not found”错误。谁能告诉我我在这里做错了什么?

编辑:这里的目标是要么在某一时刻成为超级用户并保持 sudo 权限(不使用 sudo 调用脚本),要么只在一行代码中使用密码变量。可能吗?

bash function sudo zenity
2个回答
0
投票

只需使用一个全局变量。

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

0
投票

我不知道这有多可行,但我将密码放在一个安全的文本文件中,并在每次运行脚本时使用 cat 将密码输入到一个变量中:

password=$(echo cat /usr/sec_pass)

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

© www.soinside.com 2019 - 2024. All rights reserved.