Bash 有条件地使用 sudo
Bash conditional use of sudo
所以我有一个 bash 脚本,根据它所针对的版本,可能需要 运行 一些带有 sudo 的命令。我想出了几个选项,但我想我正在寻找其他建议。这是我正在做的示例脚本:
使用每个命令有条件地检查版本
#!/usr/bin/bash
# script is run by "user1"
version=""
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
使用评估
#!/usr/bin/bash
# script is run by "user1"
version=""
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 运行。而且无论版本如何,某些命令都需要 运行 as user1。只有较高版本的命令子集需要 运行 as user2.
我喜欢 eval 因为我可以检查一次并将变量添加到必要的命令中。我不喜欢 eval,因为它看起来有点危险而且让人恶心。但是我还没有想出更好的解决方案。有任何输入吗?
您采用的 eval
方法一切正常,但您不需要使用 eval
,只需删除 run_as
变量周围的引号并像这样执行:
$run_as cp /tmp/file.txt /data/application/files/file.txt
Bash 将插入 $run_as
的值并创建解释器随后将尝试执行的字符串。
或者更好地使用这样的数组:
run_as=(sudo -u user2)
"${run_as[@]}" cp /tmp/file.txt /data/application/files/file.txt
它将解释命令
所以我有一个 bash 脚本,根据它所针对的版本,可能需要 运行 一些带有 sudo 的命令。我想出了几个选项,但我想我正在寻找其他建议。这是我正在做的示例脚本:
使用每个命令有条件地检查版本
#!/usr/bin/bash
# script is run by "user1"
version=""
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
使用评估
#!/usr/bin/bash
# script is run by "user1"
version=""
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 运行。而且无论版本如何,某些命令都需要 运行 as user1。只有较高版本的命令子集需要 运行 as user2.
我喜欢 eval 因为我可以检查一次并将变量添加到必要的命令中。我不喜欢 eval,因为它看起来有点危险而且让人恶心。但是我还没有想出更好的解决方案。有任何输入吗?
您采用的 eval
方法一切正常,但您不需要使用 eval
,只需删除 run_as
变量周围的引号并像这样执行:
$run_as cp /tmp/file.txt /data/application/files/file.txt
Bash 将插入 $run_as
的值并创建解释器随后将尝试执行的字符串。
或者更好地使用这样的数组:
run_as=(sudo -u user2)
"${run_as[@]}" cp /tmp/file.txt /data/application/files/file.txt
它将解释命令