Bash有条件地使用sudo



所以我有一个bash脚本,根据它所针对的版本,可能需要使用sudo运行一些命令。我已经提出了几个选择,但我想我正在寻找其他建议。下面是我正在做的一个示例脚本:

每个命令的版本条件检查

#!/usr/bin/bash
# script is run by "user1"
version="$1"
export version
if [[ "$version" -eq "10" ]]
then
cp /tmp/file.txt /data/application/files/file.txt
elif [[ "$version" -eq "11" ]]
then
sudo -u user2 cp /tmp/file.txt /data/application/files/file.txt
fi
exit 0

使用eval

#!/usr/bin/bash
# script is run by "user1"
version="$1"
export version
export run_as=""
if [[ "$version" -eq "10" ]]
then
run_as=""
elif [[ "$version" -eq "11" ]]
then
run_as="sudo -u user2"
fi
eval "$run_as" cp /tmp/file.txt /data/application/files/file.txt
exit 0

脚本将始终由user1运行。无论版本如何,有些命令都需要以user1的身份运行。只有在更高版本中,命令的子集才需要以user2的身份运行。

我喜欢eval,因为我可以检查一次,只需将变量添加到必要的命令中。我不喜欢eval,因为它看起来有点危险,只是感觉恶心。但我还没有想出更好的解决方案。有什么意见吗?

您采用的eval方法一切都很好,但您不需要使用eval,只需删除run_as变量周围的引号,然后执行如下:

$run_as cp /tmp/file.txt /data/application/files/file.txt

Bash将对$run_as的值进行插值,并创建一个字符串,然后解释器将尝试执行该字符串。

OR最好使用这样的数组:

run_as=(sudo -u user2)
"${run_as[@]}" cp /tmp/file.txt /data/application/files/file.txt

它将解释命令

最新更新