在 bash 脚本中仅通过 Zenity 询问用户密码一次
Ask for user password through Zenity just once in bash script
我正在创建一个 bash 脚本来执行一些存储在数组中的任务,其中一些需要提升权限。这是我目前使用 Zenity 的工作方法:
#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
password=
echo $password | sudo -S fdisk -l
}
function2()
{
password=
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 调用脚本),要么只在一行代码中使用密码变量。可能吗?
只需使用一个全局变量。
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
我正在创建一个 bash 脚本来执行一些存储在数组中的任务,其中一些需要提升权限。这是我目前使用 Zenity 的工作方法:
#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
password=
echo $password | sudo -S fdisk -l
}
function2()
{
password=
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 调用脚本),要么只在一行代码中使用密码变量。可能吗?
只需使用一个全局变量。
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